当前位置: 首页 > 知识库问答 >
问题:

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

长孙景天
2023-03-14

我试图理解当我遇到诸如“groovy.lang.MissingMethodException:无方法签名:Three.method()适用于参数类型”之类的错误时会发生什么:

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个答案

唐利
2023-03-14

我认为你在混合不同的概念。。。默认情况下,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个参数,你试图调用它传递一个映射,这是为什么您会得到一个MISSingMETHOEXION,因为在您的类中没有具有此签名的方法。

在您的例子中,只有一个方法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中使用以下代码时。。。 ...我得到以下例外: 捕获:groovy.lang.丢失方法异常:方法printDocument()的签名不适用于参数类型(java.lang.字符串,java.lang.字符串,java.lang.整数,java.lang.字符串,java.lang.字符串,java.lang.整数,java.lang.整数,java.lang.整数,java.lang.

  • 本文向大家介绍groovy 调用方法,包括了groovy 调用方法的使用技巧和注意事项,需要的朋友参考一下 示例 请注意,如果在某些元素上不存在该方法,则在集合中混合类型时,groovy.lang.MissingMethodException可能会引发a:            

  • 我需要调用一个方法:myMethod(双...选项卡),但我通过其他方法调用获取此数组的元素。现在我做的是: 但是有了它,myMethod是这样声明的: 我想知道如何使用bytebuddy来代替: 或 此外,属性“form”是一个动态检索方法,因此在“for”中执行的循环数永远不会相同。所以有时我可以调用这样的表单方法:或或

  • 问题内容: 我对包含不带参数的泛型方法的代码感到困惑,所以这种方法的返回泛型类型是什么,例如: 这是通过以下方式调用的: 接口定义为: 我的问题:是否接受字符串,对象和所有内容。那么什么时候将通用返回类型指定为String呢? 问题答案: 编译器从 LHS 分配中使用的具体类型推断出类型。 从此链接: 如果类型参数未出现在方法参数的类型中,则编译器无法通过检查实际方法参数的类型来推断类型参数。如果

  • 问题内容: 我想在Qt中使用JNI调用Android Java方法。我无法理解一个奇怪的“方法签名”参数。这是什么,我应该如何设置? 在示例中,它类似于或。这是什么意思? 例如: 问题答案: 所有这些都在文档中进行了说明。 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html 您的方法采用两个整数作为参数

  • 有什么想法吗?