class Foo { public Foo(String s) {}}print new Foo()
为什么这段代码有效?
如果我使用基本类型的参数声明构造函数,则脚本将失败.
解决方法@H_419_16@ Groovy将尽力做你要求它做的事情.当你调用new Foo()时,它匹配调用new Foo(null)的调用,因为有一个可以取空值的构造函数.如果你使构造函数采用原始类型,那么这不能为null,因此Groovy会抛出一个找不到匹配的构造函数: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(因为构造函数和方法都使用null参数调用)
wheras:
new Test( 'Max' ).a( 'Hola' )
打印Hola Max
澄清
我asked on the Groovy User mailing list,得到以下回复:
This is valID for any method call (not only constructors) and I (as well as others) really dislike this “feature” (because it’s very error prone) so it will probably disappear in Groovy 3. Also,it’s not supported by static compilation 总结
以上是内存溢出为你收集整理的groovy – 为什么可以在没有任何参数的情况下调用带有单个参数的构造函数?全部内容,希望文章能够帮你解决groovy – 为什么可以在没有任何参数的情况下调用带有单个参数的构造函数?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)