Groovy运行时方法拦截

Ale*_*rov 1 groovy metaclass method-invocation interception

我正在玩Groovy,我想知道,为什么这段代码不起作用?

package test

interface A {
    void myMethod()
}

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

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

(new B()).myMethod()
Run Code Online (Sandbox Code Playgroud)

它打印出来No catch,而我希望它打印出来Catch!.

Art*_*ero 9

这是Groovy中的一个错误,JIRA中存在一个未解决的问题:不能通过作为接口实现的一部分的元类覆盖方法,GROOVY-3493.