Java 8 generics + exceptions Fehler bei der Kompilierung bei Verwendung eines Lambda-Ausdrucks

8

Vor ein paar Tagen habe ich angefangen, Code zu refactorisieren, um die neue Java 8 Streams-Bibliothek zu verwenden. Leider habe ich bei der Ausführung von Stream :: map mit einer Methode, die deklariert wurde, ein generisches E zu werfen, das weiter als RuntimeException definiert ist, einen Kompilierzeitfehler festgestellt.

Interessant genug, der Kompilierzeitfehler verschwindet, wenn ich auf eine Methodenreferenz umschalte.

Ist das ein Fehler, oder entspricht meine Methodenreferenz meinem Lambda-Ausdruck nicht?

(Ich weiß auch, dass ich p- & gt; p.execute (foo) durch Parameter :: execute ersetzen kann. Mein tatsächlicher Code hat zusätzliche Parameter für die execute-Methode).

Fehlermeldung

%Vor%

Code

%Vor%

Systemkonfiguration

  • Betriebssystem: Windows x64
  • Java-Compiler-Version: Oracle JDK 1.8.0_11
  • IDE: Intellij
Lalaland 27.07.2014, 22:29
quelle

1 Antwort

3

Eine sehr einfache Lösung besteht darin, explizit ein Typargument für Parameter#execute(..) anzugeben.

%Vor%

Ohne das explizite Typargument scheint der JDK-Compiler kein Typargument aus dem Aufrufkontext abzuleiten, obwohl dies der Fall sein sollte. Dies ist ein Fehler und sollte als solcher gemeldet werden. Ich habe es jetzt gemeldet und werde diese Frage mit neuen Details aktualisieren, wenn ich sie habe.

Fehlerbericht

    
Sotirios Delimanolis 03.08.2014, 03:47
quelle

Tags und Links