Mam ten interfejs Java tylko z jedną metodą.Groovy odpowiednik dla Java 8 Lambda Expression
// Java Interface
public interface AuditorAware {
Auditor getCurrentAuditor();
}
używałem Java 8 wyrażenia lambda do tworzenia insance z AuditorAware
następująco.
// Java 8 Lambda to create instance of AuditorAware
public AuditorAware currentAuditor() {
return() -> AuditorContextHolder.getAuditor();
}
Próbuję napisać powyżej implementacji Java w Groovy.
Widzę, że istnieje wiele sposobów na wdrożenie interfejsów w doskonałej jakości, jak pokazano w niniejszej dokumentacji: Groovy ways to implement interfaces.
Zaimplementowałem powyższy kod Java, aby uzyskać ekwiwalent groovy przy użyciu interfejsów narzędziowych z mapą, jak pokazano w wyżej wymienionej dokumentacji.
// Groovy Equivalent by "implement interfaces with a map" method
AuditorAware currentAuditor() {
[getCurrentAuditor: AuditorContextHolder.auditor] as AuditorAware
}
Ale interfejsy implementujące metodę zamknięcia wydają się bardziej zwięzłe, jak pokazano na przykład w dokumentacji. Jednak, gdy próbuję wykonać w następujący sposób, IntelliJ
pokazuje błędy mówiąc: Niejednoznaczny blok kodu.
// Groovy Equivalent by "implement interfaces with a closure" method ???
AuditorAware currentAuditor() {
{AuditorContextHolder.auditor} as AuditorAware
}
Jak mogę zmienić implementację lambda 8 i uzyskać ekwiwalent groovy za pomocą metody "implementuj interfejsy z zamknięciem"?
próbowałeś określając zamknięcie bez opuszczania -> out? {-> AuditorContextHolder.auditor} również nie jest konieczne, jeśli korzystasz z Groovy 2.2+ –
@DylanBijnagte Dzięki. To się udało. Ponadto używam 'groovy 2.3.6'. – TheKojuEffect