如何动态重写类';s";每一个;Groovy中的方法?

如何动态重写类';s";每一个;Groovy中的方法?,groovy,overriding,each,metaclass,Groovy,Overriding,Each,Metaclass,Groovy和许多其他方法都支持java.lang.Object。我不知道如何使用Groovy元类动态替换Java类上的默认each() 我可以看到如何添加新方法: MyJavaClass.metaClass.myNewMethod = { closure -> /* custom logic */ } new MyJavaClass().myNewMethod { item -> println item } // runs custom logic 但在重写方法时,似乎同样的

Groovy和许多其他方法都支持java.lang.Object。我不知道如何使用Groovy元类动态替换Java类上的默认each()

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

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中动态重写每个()呢?

在发布问题几秒钟后,我找到了解决方案。我只需要在每个()上显式指定闭包参数的类型:

通过省略类型,我为each()添加了一个更通用的重载版本,它接受一个对象参数,而不是覆盖现有的each(),它接受一个闭包参数

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