Groovy相当于Java 8 ::(双冒号)运算符

时间:2016-12-30 15:36:44

标签: groovy

Groovy中等效于Java 8 ::(double colon operator)的内容是什么?

我正在尝试在groovy https://github.com/bytefish/PgBulkInsert

中翻译此示例

但是映射部分与Java 8的工作方式不同:

public PersonBulkInserter() {
    super("sample", "unit_test");

    mapString("first_name", Person::getFirstName);
    mapString("last_name", Person::getLastName);
    mapDate("birth_date", Person::getBirthDate);
}

2 个答案:

答案 0 :(得分:11)

Groovy并不真正拥有实例离婚的实例方法引用(编辑:然而。请参阅Wavyx对此答案的评论。),所以你必须伪造它带盖子。在Java 8中使用实例方法引用语法时,您实际上是在设置一个lambda的等效项,该lambda期望将调用实例作为其第一个(在本例中为唯一的)参数。

因此,为了在Groovy中获得相同的效果,我们必须创建一个使用默认it参数作为调用实例的闭包。像这样:

PersonBulkInserter() {
    super("sample", "unit_test")

    mapString("first_name", { it.firstName } as Function)
    mapString("last_name", { it.lastName } as Function)
    mapDate("birth_date", { it.birthDate } as Function)
}

请注意此处使用Groovy属性表示法,并且必须将Closure强制转换为@FunctionalInterfacemapString()方法所期望的mapDate()类型。< / p>

答案 1 :(得分:0)

从Groovy 3开始,对于Java 8冒号语法(support),groovy现在具有and more

所以您拥有的示例在groovy中将完全相同