下面的代码试图在Groovy类,以取代现有的方法:是否有可能取代现有对象的groovy方法?
class A {
void abc() {
println "original"
}
}
x= new A()
x.abc()
A.metaClass.abc={-> println "new" }
x.abc()
A.metaClass.methods.findAll{it.name=="abc"}.each { println "Method $it"}
new A().abc()
而且这将产生以下的输出:
original
original
Method [email protected][name: abc params: [] returns: class java.lang.Object owner: class A]
Method public void A.abc()
new
这是否意味着,当将其设置为修改元类闭包,它并不真正代替它,但只是增加了另一种可以调用的方法,从而导致元类有两种方法?是否有可能真正取代该方法,以便第二行输出打印“新”?
当试图找出它的时候,我发现DelegatingMetaClass可能会有帮助 - 是最Groovy的方式吗?
谢谢 - 我想用它来覆盖现有的Groovy类中的方法,所以我试图避免修改原始类。 – 2010-03-15 14:46:09