groovy 方法调用和参数 - 没有方法签名?

groovy method calls and parameters - no signature of method?

当我遇到 "groovy.lang.MissingMethodException: No signature of method: Three.method() is applicable for argument types: "

这样的错误时,我正试图了解发生了什么
b = "Tea"

class Three
{
    String myVar1,    myVar2,    myVar3,    myVar4,    myVar5,    myVar6
    def method(myVar1,myVar2,myVar3,myVar4,myVar5,myVar6)
    {
        try {
            println myVar1, myVar2, myVar3, myVar4, myVar5, myVar6
        } catch (groovy.lang.MissingPropertyException e) {
            println "error caught"
        }
    }

}
try {
    new Three().method(myVar1:b);
} catch (groovy.lang.MissingPropertyException e) {
    println "error caught"
}

try {
    new Three().method(myVar1=b);
} catch (groovy.lang.MissingPropertyException e) {
    println "error caught"
}

try {
    new Three().method(b);
} catch (groovy.lang.MissingPropertyException e) {
    println "error caught"
}    

我认为你混合了不同的概念...默认情况下 groovy classes 有两个默认构造函数,默认没有参数和基于映射的构造函数,其工作方式如下:

def three = new Three(myVar1:'a',myVar2:'b',myVar3:'c')
println three.myVar1 // prints a
println three.myVar2 // prints b
println three.myVar3 // prints c

然而,对于这些方法,没有这种默认行为,并且由于您不能使用这种调用,并且您必须符合方法的签名,在您的情况下,该方法需要 6 个参数,并且您正在尝试通过地图调用它,这就是您获得 missingMethodException 的原因,因为在您的 class 中没有带有此签名的方法。

在您的情况下,您只有一个方法 method(),其中包含 6 个非隐式类型的参数,因此您必须像这样调用它:

three.method(1,'kdk','asasd',2323,'rrr',['a','b'])
// or like this
three.method(1,'kdk','asasd',2323,'rrr','b')
// or like this
three.method(1,2,3,4,5,6)
// ...

请注意,在您的代码中还有另一个错误,您在 method() 中错误地调用了 println... 使用此:

println "$myVar1 $myVar2 $myVar3 $myVar4 $myVar5 $myVar6"

而不是:

println myVar1, myVar2, myVar3, myVar4, myVar5, myVar6

希望这对您有所帮助,