如何编写可以接受groovy闭包的java类方法

时间:2012-10-28 13:21:53

标签: java groovy

这就是我想要做的事情:

我有一个名为RowCollection的类,它包含一个Row个对象的集合,其方法名为edit,它应该接受另一个方法(或闭包)作为参数在Row对象上运行。

groovy脚本将以下列方式使用此类的对象:

rc.edit({ it.setTitle('hello world') }); // it is a "Row" object

我的问题:

  1. RowCollection#edit的签名会是什么样的?
  2. 它的实现是什么样的?

2 个答案:

答案 0 :(得分:3)

作为替代方案,如果您使RowCollection实现Iterable<Row>并提供合适的iterator()方法,则应用于所有类的标准Groovy-JDK魔法将启用

rc.each { it.title = "hello world" }

并且您以相同的方式免费获得所有其他iterator支持的GDK方法,包括collectfindAllinjectanyeverygrep

答案 1 :(得分:2)

好的 - 一点点挖掘,就在这里:

class RowCollection {
    private List<Row> rows;

    // ...

    public void edit(Closure c) {
        for(Row r : rows) {
            c.call(r);
        }
    }

    // ...
}

类Closure在groovy.lang包中。