我只有一種方法獲得了此Java接口。用於Java 8的Groovy等效表達式
// 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中的接口,如此文檔中所示的Groovy ways to implement interfaces文檔。
我已經實現了上面的Java代碼,通過使用上面提到的文檔中顯示的map實現接口來實現groovy等價物。
// Groovy Equivalent by "implement interfaces with a map" method
AuditorAware currentAuditor() {
[getCurrentAuditor: AuditorContextHolder.auditor] as AuditorAware
}
但是使用閉包方法實現接口看起來更簡潔,如文檔示例中所示。但是,當我嘗試執行如下操作時,IntelliJ
顯示錯誤,說明歧義代碼塊。
// Groovy Equivalent by "implement interfaces with a closure" method ???
AuditorAware currentAuditor() {
{AuditorContextHolder.auditor} as AuditorAware
}
如何通過使用「用閉包實現接口」方法將Java 8 lambda實現更改爲groovy等價物?
你試過指定關閉不離開 - > out?{ - > AuditorContextHolder.auditor}也是沒有必要的,如果你正在使用Groovy 2.2+ – 2014-10-20 02:32:09
@DylanBijnagte謝謝。這工作。另外,我正在使用'groovy 2.3.6'。 – TheKojuEffect 2014-10-20 04:47:22