Groovy 中提供了一种可以将List直接转成对象的方式,这种方式将隐式调用Groovy bean中定义的构造函数来创建对象。
假设我们有如下Groovy bean定义:
class Addr{
String homeAddr
String workAddr
Addr(def home,def office)
{
this.homeAddr=home
this.workAddr=office
}
}
那么创建Addr对象将有如下几种方式:
1. 显示调用构造函数Addr(def home,def office)
def addr=new Addr("home","office")
2. 显示使用as来调用对应的构造函数
def addr=["home","office"] as Addr
3. 隐式的让groovy通过类型推断来调用对应的构造函数
Addr addr=["home","office"]
对于第2种第3种方式,groovy bean需要显示提供对应的构造函数定义。
如果Addr groovy bean的定义没有显示提供对应的构造函数或者提供错误的构造函数,那么都不能通过将List的方式来使用groovy bean的构造函数:
没有提供对应的构造函数:
class Addr{
String homeAddr
String workAddr
}
Addr addr=["home","office"] // def addr=["home","office"] as Addr
异常:
Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[home, office]' with class 'java.util.ArrayList' to class 'constructor.Addr'
提供错误的构造函数(比如说错误的参数个数或者参数类型):
class Addr{
String homeAddr
String workAddr
Addr(int home,def office) //wrong argument type
{
this.homeAddr=home
this.workAddr=office
}
}
Addr addr=["home","office"]
class Addr{
String homeAddr
String workAddr
Addr(def home,def office,def nonUse) //wrong argument numbers
{
this.homeAddr=home
this.workAddr=office
}
}
Addr addr=["home","office"]
分享到:
相关推荐
在自定义函数中,我们可以利用Groovy的面向对象特性,定义类和方法来处理明细表和主表的数据交互。 2. **数据访问**:Groovy可以方便地与数据库进行交互,通过JDBC API或者ORM框架(如Hibernate)来查询明细表和主...
描述中提到的Groovy调用Java的过程是“无缝”的,这意味着Groovy对Java API的集成非常紧密,使得开发者可以自然地在Groovy中使用Java的功能。 Java调用Groovy类则稍微复杂一些,通常有两种主要方法: 1. **方法1:...
本文将详细讲解如何在Java应用程序中调用Groovy脚本,实现从MongoDB数据库中读取并实时运行Groovy脚本,以及其背后的原理和优势。 首先,Groovy是一种与Java高度兼容的脚本语言,它可以无缝地与Java代码集成,共享...
此外,Groovy还有闭包(Closure)的概念,这是Groovy强大的功能之一,它可以用来处理函数式编程任务,如数据过滤和映射。 其次,Groovy的动态特性是另一个关键知识点。Groovy可以在运行时改变类的结构,这意味着你...
5. 运行时和编译时特性:Groovy在运行时提供了大量的便捷特性,如隐式和显式的类型强制转换、构造函数、元编程等;同时,Groovy也允许在编译时使用AST转换,对编译过程进行增强。 6. Groovy的使用场景:书中详细...
闭包是Groovy中的一个重要特性,可以用来定义匿名函数: ```groovy def sum = { a, b -> a + b } println sum(3, 4) // 输出 7 ``` 1. **定义闭包**:使用`{ ... }`语法定义闭包。 2. **调用闭包**:通过变量名...
4. GString:Groovy中的字符串支持占位符,如`"Hello, ${name}"`,方便进行字符串格式化。 5. 链式方法调用:Groovy允许连续调用对象方法,如`list.add("item").sort().reverse()`。 在OFBiz(Open For Business ...
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
闭包(closures)是Groovy中非常重要的一个概念,闭包是一种可以作为参数传递、可以从其被定义的作用域外调用的代码块。Groovy的闭包提供了非常强大的功能,比如高阶函数的能力,它们可以用来实现迭代、排序和其他...
在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...
在本篇博客中,我们将深入探讨Groovy中Map的基本操作,特别是通过标题和描述中给出的例子。 首先,创建一个Map非常简单。例如,`def map = [a:1,b:2,c:3]`定义了一个Map,其中包含三个键值对,`a`对应1,`b`对应2,...
函数式编程在Groovy中也得到了很好的支持,如列表和映射的操作。Groovy的列表支持链式操作,如`list.each{println it}`,这会遍历列表并对每个元素执行指定的操作。映射可以通过键值对进行操作,如`map.each{k, v ->...
此外,Groovy支持闭包,这是一种强大的函数式编程特性,可以用来处理各种复杂的数据处理任务。 在“Groovy入门经典”中,你将了解到Groovy的面向对象特性,包括类、接口、继承、多态等概念。Groovy完全兼容Java的...
本节将介绍Groovy中的几个核心概念,包括本地集合、内置正则表达式和闭包等。 **本地集合**: - Groovy中的列表(List)和映射(Map)操作非常直观,支持链式调用等特性。 - 例如,可以轻松地对列表进行排序、过滤和...
Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法简洁,减少了代码...
在Groovy中,布尔值的使用与Java相似,但Groovy引入了更为简洁和灵活的方式来处理布尔表达式,提供了一套GroovyTruth规则来解释非布尔对象的真值性。 在Groovy中,布尔值可以像其他基本数据类型一样被赋值给变量。...
apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...
2. **闭包(Closure)**:Groovy中的闭包是其强大之处,它是一种可以捕获和存储上下文环境的函数。闭包可以作为参数传递,也可以作为返回值,这种特性使得Groovy非常适合进行函数式编程。 3. **元编程...