[英]Trying to call a function from inside the class in Groovy, getting MissingMethodException
我正在運行以下代碼(在 Jenkins 腳本控制台中):
def sayHello() {
println "Hello"
}
class MyClass {
MyClass() {
sayHello()
}
}
def a = new MyClass()
真誠地,我希望構造函數代碼調用將打印Hello
的 function。
相反,我得到
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 內部呼叫 function 嗎?
您收到錯誤是因為您無法從另一個 class 訪問一個 class 的方法,除非您訪問該 class 的實例。在您的情況下,代碼自動嵌入到從 groovy.lang 派生的 Main class 內的 run() 方法中。腳本。 class MyClass 是 Main class 的內部 class。請參閱此處的 腳本與類。
解決方案:要訪問 Main class 的方法 sayHello(),您必須傳遞它的實例,使用this
關鍵字:
def sayHello() {
println "Hello"
}
class MyClass {
MyClass(Script host) {
host.sayHello()
}
}
def a = new MyClass(this)
不確定您要做什么以及為什么要嘗試這樣做,但是從腳本中的構造函數調用“函數”的最簡單選擇是將其放在另一個 class 中:
class A {
static sayHello() {
println "Hello"
}
}
class MyClass {
MyClass() {
A.sayHello()
}
}
def a = new MyClass()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.