Groovy 为什么可以在没有任何参数的情况下调用具有单个参数的构造函数?
为什么这个代码可以工作Groovy 为什么可以在没有任何参数的情况下调用具有单个参数的构造函数?,groovy,Groovy,为什么这个代码可以工作 如果我用primitive类型的参数声明构造函数,脚本将失败。Groovy将尽全力完成您要求它做的事情。调用new Foo()时,它会匹配调用new Foo(null),因为有一个构造函数可以接受null值 如果将构造函数设置为基元类型,那么这不能是null,因此Groovy会抛出无法为:Foo()异常找到匹配的构造函数 方法也是如此,因此: class Foo { public Foo(String s) {} } print new Foo() 打印Hello
如果我用primitive类型的参数声明构造函数,脚本将失败。Groovy将尽全力完成您要求它做的事情。调用
new Foo()
时,它会匹配调用new Foo(null)
,因为有一个构造函数可以接受null
值
如果将构造函数设置为基元类型,那么这不能是null
,因此Groovy会抛出无法为:Foo()
异常找到匹配的构造函数
方法也是如此,因此:
class Foo {
public Foo(String s) {}
}
print new Foo()
打印Hello tim
(因为构造函数和方法都使用空参数调用)
惠拉斯:
class Test {
String name
Test( String s ) {
this.name = s ?: 'tim'
}
void a( String prefix ) {
prefix = prefix ?: 'Hello'
println "$prefix $name"
}
}
new Test().a()
打印Hola Max
澄清
我,并得到以下回应:
这对于任何方法调用都是有效的(不仅仅是构造函数),我(以及其他人)非常不喜欢这个“特性”(因为它非常容易出错),所以它可能会在Groovy 3中消失。此外,静态编译不支持它:)
因此,它可以工作(目前),但不要依赖它:-)应该注意的是,我在任何地方都找不到这一文档,因此在任何代码中使用它都会非常犹豫(因为我猜没有文档的东西在Groovy的更高版本中更可能消失)添加了一点我的答案,正如我从groovy核心开发人员那里得到的澄清:-)
new Test( 'Max' ).a( 'Hola' )