1

Groovy で遊んでいるのですが、なぜこのコードが機能しないのでしょうか?

package test

interface A {
    void myMethod()
}

class B implements A {
    void myMethod() {
        println "No catch"
    }
}

B.metaClass.myMethod = {
    println "Catch!"
}

(new B()).myMethod()

代わりに印刷されるNo catchことを期待していますが、印刷されますCatch!

4

3 に答える 3

9

これは Groovy のバグです。JIRA には未解決の問題があります: インターフェイス実装の一部であるメタクラスを介してメソッドをオーバーライドできません、GROOVY-3493

于 2012-09-05T13:35:51.683 に答える
1

B.metaClass.myMethod を書き直す代わりに、以下を試してください。

 B.metaClass.invokeMethod = {String methodName, args ->
    println "Catch!"
 }

このブログ投稿は、それを非常によく説明しています。

于 2012-09-05T13:36:21.620 に答える