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
希望这对您有所帮助,
当我遇到 "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
希望这对您有所帮助,