0

我试图了解当我收到诸如“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"
}    
4

1 回答 1

1

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

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 个参数并且您正在尝试调用它传递一个地图这就是你得到 a 的missingMethodException原因,因为你的类中没有带有这个签名的方法。

在您的情况下,您只有一个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)
// ...

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

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

代替:

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

希望这可以帮助,

于 2015-10-15T14:06:19.920 回答