首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy等价于Java 8 ::(双冒号)操作符

Groovy等价于Java 8 ::(双冒号)操作符
EN

Stack Overflow用户
提问于 2016-12-30 15:36:44
回答 2查看 7.3K关注 0票数 18

在Groovy中,与Java 8 ::(双冒号算子)的等效值是什么?

我正在尝试在groovy https://github.com/bytefish/PgBulkInsert中翻译这个例子

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

代码语言:javascript
复制
public PersonBulkInserter() {
    super("sample", "unit_test");

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-30 21:12:05

Groovy实际上并没有实例分离的实例-方法引用(编辑:但。请参阅Wavyx对这个答案的评论。),所以您必须用闭包来伪装它。在Java 8中使用实例-方法引用语法时,您实际上是在设置一个类似于lambda的对象,它期望调用实例作为其第一个参数(在本例中仅为)。

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

代码语言:javascript
复制
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类型。

票数 15
EN

Stack Overflow用户

发布于 2019-07-23 19:16:37

从Groovy 3 (beta)开始,groovy现在有了支持 for java 8冒号语法(还有更多)。

因此,在groovy中,您所提供的示例将完全相同。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41398751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档