groovy – 为什么可以在没有任何参数的情况下调用带有单个参数的构造函数?

groovy – 为什么可以在没有任何参数的情况下调用带有单个参数的构造函数?,第1张

概述class Foo { public Foo(String s) {}}print new Foo() 为什么这段代码有效? 如果我使用基本类型的参数声明构造函数,则脚本将失败. Groovy将尽力做你要求它做的事情.当你调用new Foo()时,它匹配调用new Foo(null)的调用,因为有一个可以取空值的构造函数. 如果你使构造函数采用原始类型,那么这不能为null,因此Groov
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 – 为什么可以在没有任何参数的情况下调用带有单个参数的构造函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存