这就是我想要做的事情:
我有一个名为RowCollection
的类,它包含一个Row
个对象的集合,其方法名为edit
,它应该接受另一个方法(或闭包)作为参数在Row
对象上运行。
groovy脚本将以下列方式使用此类的对象:
rc.edit({ it.setTitle('hello world') }); // it is a "Row" object
我的问题:
RowCollection#edit
的签名会是什么样的?答案 0 :(得分:3)
作为替代方案,如果您使RowCollection
实现Iterable<Row>
并提供合适的iterator()
方法,则应用于所有类的标准Groovy-JDK魔法将启用
rc.each { it.title = "hello world" }
并且您以相同的方式免费获得所有其他iterator
支持的GDK方法,包括collect
,findAll
,inject
,any
, every
和grep
。
答案 1 :(得分:2)
好的 - 一点点挖掘,就在这里:
class RowCollection {
private List<Row> rows;
// ...
public void edit(Closure c) {
for(Row r : rows) {
c.call(r);
}
}
// ...
}
类Closure在groovy.lang
包中。