2011-05-17 72 views
0

當下面時我的單元測試執行的類的構造函數,我得到的錯誤:Groovy的構造問題

No signature of method: static grails.plugin.flashhelper.args.AnonymousArgumentsResolver.getDefaultMessages() is applicable for argument types: ([Ljava.lang.Object;) values: [[message number 1]]

class AnonymousArgumentsResolver extends AbstractArgumentsResolver { 

    private final args 

    AnonymousArgumentsResolver(methodArgs) { 

     super(methodArgs[0], getDefaultMessages(methodArgs)) 

     this.args = methodArgs 
    } 

    private final getDefaultMessages(methodArgs) { 

     if (methodArgs.size() > 1) { 
      methodArgs[1..-1].find { it instanceof String || it instanceof List } 
     } 
    } 
} 

如果我改變getDefaultMessages是一個static方法,一切工作正常。我不知道爲什麼Groovy要求這種方法是靜態的?

回答

4

在java中這不是也需要靜態嗎?

您試圖調用一個實例方法在超(),在任何情況下還存在一個電話......

+0

所以這只是一個問題,因爲呼叫內'超()',不是因爲它的在構造函數中? 'super()'必須成爲構造函數的第一行的限制是否也適用於Groovy? – 2011-05-17 16:23:16

+0

是的,在調用super()之後,你應該可以輕鬆地調用它,並且afaik,groovy對構造函數對super()的調用仍然存在「第一行」限制。 – 2011-05-17 16:26:37