LambdaConversionException beim Mischen von Methodenreferenz und Generika

8

Der folgende Code wird zwar kompiliert, löst jedoch zur Laufzeit eine Ausnahme aus. Ist dies das erwartete Verhalten und warum?

Code:

%Vor%

Ausgabe:

%Vor%     
assylias 03.11.2015, 19:26
quelle

4 Antworten

1

Es scheint ein Netbeans-Problem zu sein und ich kann das Problem nicht reproduzieren, wenn ich javac von der Kommandozeile aus benutze. Ich habe einen Fehlerbericht eingereicht.

    
assylias 04.11.2015, 07:27
quelle
5

Ihr Code würde nicht funktionieren, selbst wenn Sie Lambdas anstelle von Methodenreferenzen verwenden, da der Stream bereits erschöpft ist.

%Vor%

Streams sind einmalig. Aber lassen wir das auseinander. Wenn Sie die Methodenreferenzversion verwenden, erfasst sie Number als Typparameter und nicht Comparable , wo Number keine compareTo vielleicht enthält, weil Number hier spezifischer ist. Wenn Sie nur Comparable verwenden, funktioniert es gut

%Vor%

IMO (nur um vorsichtig zu sein): Ich glaube, es ist ein Fehler.

Was ich eigentlich glaube: Es ist definitiv ein Bug.

Edit: Es stellt sich heraus, dass es sich um einen Bug handelt, der von Brian Goetz bestätigt wurde. Ссылка . Laut der Fehlerdatenbank wurde dies in 8u40

behoben     
Sleiman Jneidi 03.11.2015 20:42
quelle
3

Das Initialisierungsproblem für die Call-Site wird über JDK-8058112 behoben verfügbar in JDK 8u40 b17 oder später.

    
Srikanth 04.11.2015 03:54
quelle
1

Für diejenigen, die dieses Problem 2017 mit java8 1.8.0_141 haben, gibt es einen weiteren Fehlerbericht JDK- 8142476 und die Fix-Version ist nur java9 .

    
hahn 25.07.2017 15:59
quelle