在Groovy中,与Java 8 ::(双冒号算子)的等效值是什么?
我正在尝试在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);
}发布于 2016-12-30 21:12:05
Groovy实际上并没有实例分离的实例-方法引用(编辑:但。请参阅Wavyx对这个答案的评论。),所以您必须用闭包来伪装它。在Java 8中使用实例-方法引用语法时,您实际上是在设置一个类似于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转换为mapString()或mapDate()方法所期望的@FunctionalInterface类型。
发布于 2019-07-23 19:16:37
从Groovy 3 (beta)开始,groovy现在有了支持 for java 8冒号语法(还有更多)。
因此,在groovy中,您所提供的示例将完全相同。
https://stackoverflow.com/questions/41398751
复制相似问题