2017-06-27 2 views
0

Ich versuche, eine Methode innerhalb einer anderen aufzurufen, und ich bekomme eine MissingMethodException. Mein Code sieht in etwa wie folgt aus:MissingMethodException beim Aufruf der Methode in einem anderen

class Foo { 
    static def bar { 
    //do stuff 
    return something 
    } 
    static def baz { myVar=false -> 
    def something = bar() 
    //do stuff w/something 
    } 
} 
Foo.baz() 

und das ist der Fehler, den ich bekommen: Caught: groovy.lang.MissingMethodException: No signature of method: Foo$__clinit__closure6.bar() is applicable for argument types:() values: []

Ich fand, dass ich diesen Fehler beheben kann, wenn ich baz wie folgt definieren statt:

static def baz { myVar=false -> 
    def something = this.bar() 
    //do stuff w/something 
} 

aber wenn ich das tue, sagt mir meine IDE, dass dies ein Unnecessary qualified reference ist.

Was geht hier vor?

Antwort

1

Die Syntax in Ihrem Snippet ist falsch. Entweder wollten Sie static def bar = {} oder static def bar() {}.

Wenn Sie eine Methode bar sein, dann wollte keinen Fehler:

class Foo { 
    static bar() { 'something' } 

    static baz = { myVar=false -> 
    def something = bar() 
    return something + "!" 
    } 
} 

assert Foo.baz() == "something!" 

Wenn Sie bar einen Verschluss (dh bar = {}) dann aufrufen bar von baz Sie die Klasse setzen müssen sein wollen Name zuerst:

class Foo { 
    static bar = { 'something' } 

    static baz = { myVar=false -> 
    def something = Foo.bar() 
    return something + "!" 
    } 
} 

assert Foo.baz() == "something!" 
Verwandte Themen