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[]>
"
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% 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.