簡體   English   中英

嘗試從 Groovy 中的 class 內部調用 function,得到 MissingMethodException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM