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);
}
答案 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
强制转换为@FunctionalInterface
或mapString()
方法所期望的mapDate()
类型。< / p>
答案 1 :(得分:0)