当我收到类似&#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"
}
答案 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
希望这有帮助,