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

时间:2015-10-15 13:48:28

标签: groovy missingmethodexception

当我收到类似&#34; groovy.lang.MissingMethodException的错误时,我试图理解发生的事情:没有方法签名:Three.method()适用于参数类型:&#34; < / p>

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"
}    

1 个答案:

答案 0 :(得分:0)

我认为你混合了不同的概念......默认情况下,groovy类有两个默认构造函数,默认没有params,基于map的构造函数如下:

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,因为在你的类中没有这个签名的方法。

在您的情况下,您只有一个方法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

希望这有帮助,