Ich habe bemerkt, dass der folgende Code beim Kompilieren in Eclipse mit Java Spec 1.7 funktioniert, aber nicht mit 1.6.
funktioniert %Vor%Ich möchte eine Erklärung aber diese Syntax und warum es für 1.7 funktioniert.
Die new HashMap<>()
(Diamantsyntax genannt) ist in JDK 1.6 einfach nicht erlaubt, weil sie nur in Java SE 7 eingeführt wurde.
Suchen Sie nach Inferenz für generische Instanz Creation in Highlights von Technologieänderungen in Java SE 7 > .
Ich möchte eine Erklärung aber diese Syntax und warum es für 1.7 funktioniert.
Hier ist diese Erklärung (leicht angepasst) von Oracle selbst :
%Vor%Compiler aus Releases vor Java SE 7 können ähnlich wie generische Methoden auf die eigentlichen Typparameter generischer Konstruktoren zurückgreifen. Der Compiler in Java SE 7 kann jedoch die tatsächlichen Typparameter der generischen Klasse, die instanziiert wird, ableiten, wenn Sie den Diamanten (
<>
) verwenden . Betrachten Sie das folgende Beispiel, das für Java SE 7 und höher gilt:
%Vor%
In diesem Beispiel bezieht der Compiler den Typ
Integer
für den formalen TypparameterX
der generischen KlasseMyClass<X>
. Es leitet den TypString
für den formalen TypparameterT
des Konstruktors dieser generischen Klasse ab.
%Vor%In Java SE 7 können Sie den parametrisierten Typ des Konstruktors durch eine leere Gruppe von Typparametern (& lt; & gt;) ersetzen:
In Java SE 6 musste es so gemacht werden:
%Vor%Es verwendet den Diamantenoperator , der in 1.7 eingeführt wurde.
Sie können nicht dieselbe Syntax verwenden wie in JDK 1.7 für JDK 1.6