Java Groovy方法调用语法
一篇教程说: 如果至少有一个参数并且没有歧义,Groovy中的方法调用可以省略括号 这项工作:Java Groovy方法调用语法,java,groovy,Java,Groovy,一篇教程说: 如果至少有一个参数并且没有歧义,Groovy中的方法调用可以省略括号 这项工作: static method1(def val1) { "Statement.method1 : $val1" } def method1retval = method1 30; println (method1retval); //Statement.method1 : 30 但当我向该方法添加另一个参数时: static method1(def val1, def val2) {
static method1(def val1)
{
"Statement.method1 : $val1"
}
def method1retval = method1 30;
println (method1retval); //Statement.method1 : 30
但当我向该方法添加另一个参数时:
static method1(def val1, def val2)
{
"Statement.method1 : $val1 $val2"
}
def method1retval = method1 30 "20";
println (method1retval);
这是错误的
Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: static Statements.method1() is applicable for argument types: (java.lang.Integer) values: [30]
Possible solutions: method1(int, java.lang.String)
Q.所以,当方法调用中有多个参数时,我不能省略括号吗
Q.调用类构造函数时是否也可以省略括号?然后调用的是
method1 30,“20”
。文件上说你可以省略(和),但不能省略,
。在您的情况下,代码将被解释为method1(30)。“20”
(执行下一个调用)
对于构造器,一般来说,同样的规则也适用。但通常它们与new
一起使用,这不起作用
class A {
A() { println("X") }
A(x,y) { println([x,y]) }
}
// new A // FAILS
// new A 1,2 FAILS
A.newInstance 1,2 // works
new
周围的错误表明,(
是预期的,并且它们在解析时已经失败。new
是一个关键字,具有特殊行为
实际上,这一切都归结为:避免使用
()
,使代码变得更好(或者更短,如果您编写高尔夫代码的话)。它的主要用途是“DSL”,您可以将代码转换成可读的句子(例如,从“表”中选择“*”,其中“x>6”或在grails静态约束中{myval nullable:true,min:42}
)如果你可以用“不含糊不清”来称呼它,但是用<代码>新的…<代码> >新的A < /代码>或<代码>新的1 < /代码>或<代码>新的1, 2 < /代码>工作。如果你需要使用DSL来考虑使用生成器。一个参数的链式调用每一个都与离开()的工作很好,并且建造者/Fluent API相当匹配。但是<代码>新A 1,“2”。也不起作用,也没有歧义,1
是int
,“2”
是String
。获取Groovy:type name后面的“(”或“[”继续新的表达式
我可以说,问题是这个代码可能被解释为new(A)(1,“2”)
。但是我猜,keyworknew
在语言中只有特殊的行为。好吧,这只适用于方法调用,而不是构造函数调用。请参阅我的编辑。newInstance
e.g.(好吧,好吧,诡计:通过另一种方式调用)。对于new