java - Java 8 Lambda 表达式的 Groovy 等价物

标签 java groovy lambda closures java-8

我只用一种方法得到了这个 Java 接口(interface)。

// Java Interface
public interface AuditorAware {
    Auditor getCurrentAuditor();
}

我使用 Java 8 Lambda 表达式创建 AuditorAware 的实例,如下所示。

// Java 8 Lambda to create instance of AuditorAware
public AuditorAware currentAuditor() {
    return () -> AuditorContextHolder.getAuditor();
}

我正在尝试在 Groovy 中编写上述 Java 实现。

我看到有很多方法可以在 groovy 中实现接口(interface),如 Groovy ways to implement interfaces 所示。 文档。

我已将上述 Java 代码实现为 groovy 等效项,方法是使用带有映射的实现接口(interface),如上述文档所示。

// Groovy Equivalent by "implement interfaces with a map" method
AuditorAware currentAuditor() {
    [getCurrentAuditor: AuditorContextHolder.auditor] as AuditorAware
}

但如文档示例所示,使用闭包方法实现接口(interface)似乎更简洁。但是,当我尝试按如下方式实现时,IntelliJ 显示错误提示 Ambiguous Code Block

// Groovy Equivalent by "implement interfaces with a closure" method ???
AuditorAware currentAuditor() {
    {AuditorContextHolder.auditor} as AuditorAware
}

如何使用“使用闭包实现接口(interface)”方法将 Java 8 lambda 实现更改为等效的 groovy 实现?

最佳答案

正如 Dylan Bijnagte 评论的那样,以下代码有效。

// Groovy Equivalent by "implement interfaces with a closure" method 
AuditorAware currentAuditor() {
    { -> AuditorContextHolder.auditor} as AuditorAware
}
Documentation on Groovy Closure

部分参数注释解释一下。

关于java - Java 8 Lambda 表达式的 Groovy 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26457622/

相关文章:

java - 如何为 Spring Boot 2 创建自定义嵌入式 servlet 容器

java - 正则表达式检查字符串仅包含十六进制字符

java - 属性文件到 Excel 文件

java - 在使用 Gradle 构建的 Groovy 项目中抑制 Java 警告 "Unsafe is internal proprietary API"

Grails 1.4 - ApplicationHolder、ConfigurationHolder 等发生了什么?

rest - 在模拟服务 URL 中使用通配符

ruby-on-rails - "taken"是 ruby​​ 中的关键字吗?

java - 将 Eclipse 项目转换为 Maven 项目丢失按钮链接

java - Java 8 与 Java 9 中的 Stream.peek() 方法

node.js - S3 存储桶 Lambda 事件 : Unable to validate the following destination configurations