`
scanfprintf123
  • 浏览: 80395 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy中的隐式构造函数

阅读更多

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"]
 
0
0
分享到:
评论

相关推荐

    通过groovy自定义函数实现提取明细表字段至主表字段.rar

    在自定义函数中,我们可以利用Groovy的面向对象特性,定义类和方法来处理明细表和主表的数据交互。 2. **数据访问**:Groovy可以方便地与数据库进行交互,通过JDBC API或者ORM框架(如Hibernate)来查询明细表和主...

    groovy和Java相互调用1

    描述中提到的Groovy调用Java的过程是“无缝”的,这意味着Groovy对Java API的集成非常紧密,使得开发者可以自然地在Groovy中使用Java的功能。 Java调用Groovy类则稍微复杂一些,通常有两种主要方法: 1. **方法1:...

    Java调用Groovy,实时动态加载数据库groovy脚本

    本文将详细讲解如何在Java应用程序中调用Groovy脚本,实现从MongoDB数据库中读取并实时运行Groovy脚本,以及其背后的原理和优势。 首先,Groovy是一种与Java高度兼容的脚本语言,它可以无缝地与Java代码集成,共享...

    Groovy学习资料

    此外,Groovy还有闭包(Closure)的概念,这是Groovy强大的功能之一,它可以用来处理函数式编程任务,如数据过滤和映射。 其次,Groovy的动态特性是另一个关键知识点。Groovy可以在运行时改变类的结构,这意味着你...

    Groovy Script 入门

    闭包是Groovy中的一个重要特性,可以用来定义匿名函数: ```groovy def sum = { a, b -> a + b } println sum(3, 4) // 输出 7 ``` 1. **定义闭包**:使用`{ ... }`语法定义闭包。 2. **调用闭包**:通过变量名...

    Groovy中文教程

    4. GString:Groovy中的字符串支持占位符,如`"Hello, ${name}"`,方便进行字符串格式化。 5. 链式方法调用:Groovy允许连续调用对象方法,如`list.add("item").sort().reverse()`。 在OFBiz(Open For Business ...

    groovy-3.0.9-API文档-中文版.zip

    赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    groovy in action 中文版 2017.11

    闭包(closures)是Groovy中非常重要的一个概念,闭包是一种可以作为参数传递、可以从其被定义的作用域外调用的代码块。Groovy的闭包提供了非常强大的功能,比如高阶函数的能力,它们可以用来实现迭代、排序和其他...

    Java中使用Groovy的三种方式

    在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...

    groovy中map的基本操作1

    在本篇博客中,我们将深入探讨Groovy中Map的基本操作,特别是通过标题和描述中给出的例子。 首先,创建一个Map非常简单。例如,`def map = [a:1,b:2,c:3]`定义了一个Map,其中包含三个键值对,`a`对应1,`b`对应2,...

    groovy入门经典,groovyeclipse 插件

    函数式编程在Groovy中也得到了很好的支持,如列表和映射的操作。Groovy的列表支持链式操作,如`list.each{println it}`,这会遍历列表并对每个元素执行指定的操作。映射可以通过键值对进行操作,如`map.each{k, v ->...

    Groovy.in.Action.2nd.Edition.pdf

    5. 运行时和编译时特性:Groovy在运行时提供了大量的便捷特性,如隐式和显式的类型强制转换、构造函数、元编程等;同时,Groovy也允许在编译时使用AST转换,对编译过程进行增强。 6. Groovy的使用场景:书中详细...

    Groovy入门经典 中英文版本

    此外,Groovy支持闭包,这是一种强大的函数式编程特性,可以用来处理各种复杂的数据处理任务。 在“Groovy入门经典”中,你将了解到Groovy的面向对象特性,包括类、接口、继承、多态等概念。Groovy完全兼容Java的...

    精通 Groovy 中文教程

    本节将介绍Groovy中的几个核心概念,包括本地集合、内置正则表达式和闭包等。 **本地集合**: - Groovy中的列表(List)和映射(Map)操作非常直观,支持链式调用等特性。 - 例如,可以轻松地对列表进行排序、过滤和...

    Groovy入门教程[参照].pdf

    Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法简洁,减少了代码...

    Groovy语法系列教程之布尔(五).pdf

    在Groovy中,布尔值的使用与Java相似,但Groovy引入了更为简洁和灵活的方式来处理布尔表达式,提供了一套GroovyTruth规则来解释非布尔对象的真值性。 在Groovy中,布尔值可以像其他基本数据类型一样被赋值给变量。...

    Groovy in Action[文字版][中文]

    2. **闭包(Closure)**:Groovy中的闭包是其强大之处,它是一种可以捕获和存储上下文环境的函数。闭包可以作为参数传递,也可以作为返回值,这种特性使得Groovy非常适合进行函数式编程。 3. **元编程...

    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版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

Global site tag (gtag.js) - Google Analytics