试图从Groovy中的类内部调用函数,得到MissingMethodException

试图从Groovy中的类内部调用函数,得到MissingMethodException,groovy,Groovy,我正在运行以下代码(在Jenkins脚本控制台中): 出于善意,我希望构造函数代码调用将打印Hello的函数 相反,我得到了 groovy.lang.MissingMethodException: No signature of method: MyClass.sayHello() is applicable for argument types: () values: [] at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unw

我正在运行以下代码(在Jenkins脚本控制台中):

出于善意,我希望构造函数代码调用将打印
Hello
的函数

相反,我得到了

groovy.lang.MissingMethodException: No signature of method: MyClass.sayHello() is applicable for argument types: () values: []
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)

这是怎么回事?我无法从类内部调用函数?

不确定您要做什么以及为什么要这样做,但从脚本内部的构造函数调用“函数”的最简单方法是将其放入另一个类中:

class A {
  static sayHello() {
    println "Hello"
  }
}

class MyClass {
    MyClass() {
        A.sayHello()
    }
}

def a = new MyClass()

不确定您试图做什么以及为什么要这样做,但从脚本中的构造函数调用“函数”的最简单方法是将其放入另一个类中:

class A {
  static sayHello() {
    println "Hello"
  }
}

class MyClass {
    MyClass() {
        A.sayHello()
    }
}

def a = new MyClass()

出现错误是因为您无法从另一个类访问一个类的方法,除非您访问该类的实例。 在您的例子中,代码将自动嵌入从groovy.lang.Script派生的主类中的run()方法中。类MyClass是主类的内部类。看这里

解决方案:要访问Main类的方法sayHello(),必须使用
this
关键字传递它的实例:

def sayHello() {
    println "Hello"
}

class MyClass {
    MyClass(Script host) {
        host.sayHello()
    }
}

def a = new MyClass(this)

出现错误是因为您无法从另一个类访问一个类的方法,除非您访问该类的实例。 在您的例子中,代码将自动嵌入从groovy.lang.Script派生的主类中的run()方法中。类MyClass是主类的内部类。看这里

解决方案:要访问Main类的方法sayHello(),必须使用
this
关键字传递它的实例:

def sayHello() {
    println "Hello"
}

class MyClass {
    MyClass(Script host) {
        host.sayHello()
    }
}

def a = new MyClass(this)