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"]
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值