Warum hat dieses Java 8-Beispiel, das Typinterferenz verwendet, in Eclipse kompiliert?

8

Ich lese das neu veröffentlichte Java 8 in Action und fand heraus, dass ein Code aus Kapitel 5 nicht kompiliert wurde:

%Vor%

Eclipse sagt: "Typenkonflikt: kann nicht von List<Object> in List<int[]> "

konvertiert werden

Und nach dem Vergleich mit dem, was der Autor auf Github gab, kompilierte folgendes:

%Vor%

Die einzige Änderung ist von "j" zu "(Integer j)".

Aber ist die erste Version nicht komplett äquivalent zu der zweiten mit der Syntax von Java 8? Warum weigert sich Java, es zu kompilieren?

Danke

BTW:

%Vor%     
Tony Lang 15.09.2014, 17:56
quelle

1 Antwort

15

Erstens, korrigieren Sie Ihre Terminologie: Wenn Sie Syntax Zucker sagen, was Sie wirklich fragen, ist Typ Rückschluss , dass, wenn aufgefordert, einen Typ für j abzuleiten im inneren Lambda, dass der Compiler nicht mit dem richtigen Typ kommt.

Zweitens, korrigieren Sie Ihre Daten: Die von Ihnen angegebenen Fehlermeldungen stammen nicht vom JDK-Compiler; Sie kommen aus Eclipse.

Dies ist nur ein Eclipse Bug. Der Referenz-Compiler ( javac von Oracle JDK) behandelt Ihr erstes Beispiel gut.

    
Brian Goetz 15.09.2014, 18:12
quelle

Tags und Links