2010-05-02 28 views
4

Groovy adds each()和一些其他的java.lang.Object方法。我无法弄清楚如何使用Groovy元类来动态替换Java类中的默认each()。如何在Groovy中动态重写类的“每个”方法?

我可以看到如何添加新的方法:

MyJavaClass.metaClass.myNewMethod = { closure -> /* custom logic */ } 
new MyJavaClass().myNewMethod { item -> println item } // runs custom logic 

但似乎相同的方法行不通覆盖方法:

MyJavaClass.metaClass.each = { closure -> /* custom logic */ } 
new MyJavaClass().each { item -> println item } // runs Object.each() 

我在做什么错?我如何动态覆盖Groovy中的每个()?

回答

8

那么发现问题后我发现了解决方案的几秒钟。我只是需要明确指定封闭的说法在每()类型:

MyJavaClass.metaClass.each = { Closure closure -> /* custom logic */ } 
new MyJavaClass().each { item -> println item } // runs custom logic 

通过留出的类型,我将每一个更宽泛的重载版本(),它接受一个Object参数,而不是覆盖现有的接受Closure参数的each()。

相关问题