我只用一种方法得到了这个 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/