Warum erzeugt neue HashMap einen Fehler in JDK 1.6, aber nicht in 1.7?

8

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.

    
Menelaos Bakopoulos 17.05.2013, 14:58
quelle

5 Antworten

19

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 :

  

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%

%Vor%
  

In diesem Beispiel bezieht der Compiler den Typ Integer für den formalen Typparameter X der generischen Klasse MyClass<X> . Es leitet den Typ String für den formalen Typparameter T des Konstruktors dieser generischen Klasse ab.

    
acdcjunior 17.05.2013, 14:59
quelle
9
  

In Java SE 7 können Sie den parametrisierten Typ des Konstruktors durch eine leere Gruppe von Typparametern (& lt; & gt;) ersetzen:

%Vor%

In Java SE 6 musste es so gemacht werden:

%Vor%

Weitere Details ...

    
Adam Siemion 17.05.2013 14:59
quelle
4

Weil es eine Erweiterung von JDK 1.7 (der Diamond-Operator) ist, bevor Sie die generischen Typen für die Klasse und den Konstruktor HashMap<String, String> hashMap = new HashMap<String, String>();

angeben müssen     
gma 17.05.2013 14:59
quelle
2

Es verwendet den Diamantenoperator , der in 1.7 eingeführt wurde.

    
Kevin Bowersox 17.05.2013 14:59
quelle
1

Sie können nicht dieselbe Syntax verwenden wie in JDK 1.7 für JDK 1.6

    
user2391059 17.05.2013 15:00
quelle

Tags und Links