3

这是我想要做的:

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

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

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

我的问题:

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

2 回答 2

3

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

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

并且您以相同的方式免费获得所有其他支持的iteratorGDK 方法,包括collectfindAllinject、和.anyeverygrep

于 2012-10-29T08:59:34.940 回答
2

好的 - 稍微挖掘一下,这里是:

class RowCollection {
    private List<Row> rows;

    // ...

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

    // ...
}

类 Closure 在groovy.lang包中。

于 2012-10-28T13:41:07.993 回答