Java 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) {

一篇教程说:

如果至少有一个参数并且没有歧义,Groovy中的方法调用可以省略括号

这项工作:

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”)
。但是我猜,keywork
new
在语言中只有特殊的行为。好吧,这只适用于方法调用,而不是构造函数调用。请参阅我的编辑。
newInstance
e.g.(好吧,好吧,诡计:通过另一种方式调用)。对于
new