class Foo {
public Foo(String s) {}
}
print new Foo()
为什么这段代码有效?
如果我使用原始类型的参数声明构造函数,则脚本将失败。
class Foo {
public Foo(String s) {}
}
print new Foo()
为什么这段代码有效?
如果我使用原始类型的参数声明构造函数,则脚本将失败。
Groovy 将尽最大努力去做您要求它做的事情。当您调用时new Foo()
,它会与调用匹配,new Foo( null )
因为有一个可以获取null
值的构造函数。
如果您让构造函数采用原始类型,那么 this 不能是null
,因此 Groovy 会抛出一个Could not find matching constructor for: Foo()
异常,如您所见。
它对方法也是如此,所以:
class Test {
String name
Test( String s ) {
this.name = s ?: 'tim'
}
void a( String prefix ) {
prefix = prefix ?: 'Hello'
println "$prefix $name"
}
}
new Test().a()
打印Hello tim
(因为构造函数和方法都使用空参数调用)
其中:
new Test( 'Max' ).a( 'Hola' )
印刷Hola Max
我在 Groovy User mailing list 上询问,得到以下回复:
这对任何方法调用(不仅是构造函数)都是有效的,而且我(以及其他人)真的不喜欢这个“特性”(因为它很容易出错)所以它可能会在 Groovy 3 中消失。另外,它不受静态编译的支持:)
所以在那里,它可以工作(现在),但不要依赖它:-)