Rekursive Lambda-Ausdrücke in Java 8

8

Ich wollte nur einen Java 8 Lambda-Ausdruck rekursiv definieren.

Die Lambda-FAQ erwähnt dass man einen rekursiven Lambda-Ausdruck nur während der (statischen) Feldinitialisierung definieren kann.

Aber ich bekomme einen Compilerfehler in IntelliJ (javac meldet nur einen Fehler ohne eine Nachricht):

  

java: Selbstreferenz im Initialisierer

Wenn ich versuche, etwas zu schreiben wie:

%Vor%

oder

%Vor%

Eine Möglichkeit, um es zum Laufen zu bringen, war die Verwendung eines Arrays zur Referenzierung des Lambda, um den Java-Compiler effektiv zu manipulieren:

%Vor%

Gibt es einen weiteren Trick, um einen rekursiven Lambda-Ausdruck zu definieren?

    
Thomas Darimont 11.08.2014, 21:46
quelle

1 Antwort

8

Sie können es einrichten, indem Sie den Feldnamen, auf den rekursiv verwiesen wird, vollständig qualifizieren. Diese Version kompiliert ohne Fehler:

%Vor%

Related: Warum verbieten lambdas in Java 8 den Verweis auf Membervariablen, bei denen anonyme Klassen nicht funktionieren?

    
DaoWen 11.08.2014 22:13
quelle

Tags und Links