繁体   English   中英

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

[英]How to write java class methods that can accept groovy closures

这就是我想要做的事情:

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

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

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

我的问题:

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

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

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

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

好的 - 一点点挖掘,这里是:

class RowCollection {
    private List<Row> rows;

    // ...

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

    // ...
}

Closure类在groovy.lang包中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM