加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Groovy中动态覆盖类的“each”方法?

发布时间:2020-12-14 16:23:33 所属栏目:大数据 来源:网络整理
导读:Groovy adds each()和java.lang.Object的许多其他方法.我无法弄清楚如何使用Groovy元类动态替换Java类上的默认each(). 我可以看到如何添加新方法: MyJavaClass.metaClass.myNewMethod = { closure - /* custom logic */ }new MyJavaClass().myNewMethod { i
Groovy adds each()和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()上明确指定Closure参数的类型:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读