Antworten gefunden bei Java 8 lambdas, Function.identity () oder t- & gt; t scheinen zu implizieren, dass Function.identity()
entspricht fast immer t -> t
. Im unten gezeigten Testfall führt das Ersetzen von t -> t
durch Function.identity()
jedoch zu einem Compilerfehler. Warum ist das so?
Fall 1 kompiliert gut, aber Fall 2 schlägt fehl mit:
%Vor%Meine Umgebung ist Windows 10, 64-Bit, Oracle JDK Build 1.8.0_92-b14.
UPDATE : Da dies unter ecj kompiliert wird, habe ich eine weitere Frage: Ist das ein Fehler in javac
? Was sagt die JLS zu diesem Fall?
Ecj kann das korrekte (?) Argument (Integer) eingeben, um den Bedingungen zu entsprechen. Javac kommt aus irgendeinem Grund zu einem anderen Ergebnis.
Das ist nicht das erste Mal, dass sich javac / ecj beim Schließen von Typparametern anders verhalten.
In diesem Fall können Sie javac einen Hinweis mit Function. & lt; Integer & gt; identity () geben, um es mit javac compilierbar zu machen.
Für den Unterschied zwischen Function.identity () und t- & gt; t:
So t- & gt; t ist flexibler in den Methoden, zu denen es passen kann.
Tags und Links java generics reification