代码之家  ›  专栏  ›  技术社区  ›  rewbs

如何在Groovy中动态重写类的“each”方法?

  •  4
  • rewbs  · 技术社区  · 15 年前

    太棒了 adds 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()?

    1 回复  |  直到 15 年前
        1
  •  8
  •   rewbs    15 年前

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

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

    推荐文章