10
votes

Pourquoi le nouveau hashmap <> produit-il une erreur dans JDK 1.6 mais pas 1.7

J'ai remarqué que le code suivant fonctionne lors de la compilation d'Eclipse avec Java Spec 1.7 mais ne fonctionne pas avec 1.6.

HashMap<String, String> hashMap = new HashMap<>();


4 commentaires

Stackoverflow.com/Questtions/16243541/...


Quel est le point de cet opérateur?


C'est pour l'inférence de type, mais aussi en même temps, raconter le compilateur "Hey, ce n'est pas un type brut". Vous pouvez voir ma réponse dans le message que j'ai lié à.


Pour réduire le bruit visuel, rien de plus.


5 Réponses :


21
votes

Le nouveau hashmap <> () (appelé la syntaxe de diamant) n'est pas autorisé dans JDK 1.6 simplement parce qu'il n'a été introduit que dans Java SE 7.

Recherchez Type Inference pour la création d'instance générique Points forts des changements de technologie dans Java SE 7 .

Je voudrais une explication mais cette syntaxe et pourquoi cela fonctionne pour 1.7.

Voici cette explication (légèrement adaptée) de Oracle lui-même :

compilateurs des versions antérieures à Java SE 7 sont capables de déduire les paramètres de type réels de constructeurs génériques, similaires à des méthodes génériques. Cependant, le compilateur de Java SE 7 peut déduire les paramètres de type réels de la classe générique étant instanciée si vous utilisez le diamant ( <> ) . Considérez l'exemple suivant, qui est valide pour Java SE 7 et plus tard: xxx

xxx

Dans cet exemple, le compilateur INDERS Le type INTEGER pour le paramètre de type formel, x , de la classe générique myClass . IT INFERS Le type chaîne pour le paramètre de type formel, t du constructeur de cette classe générique.


0 commentaires

2
votes

Il utilise le opérateur de diamant introduit en 1.7.


0 commentaires

4
votes

Parce que c'est une amélioration de JDK 1.7 (l'opérateur de diamant), avant de spécifier les types génériques de la classe et sur le constructeur HASHMAP HASHMAP = NOUVEAU HASHMAP ( );


0 commentaires

14
votes

Dans Java SE 7, vous pouvez remplacer le type paramétré du constructeur avec un ensemble de paramètres de type vide (<>): xxx

en Java SE 6 Il fallait être fait de cette façon: xxx

Plus de détails ...


0 commentaires

1
votes

Vous ne pouvez pas utiliser la même syntaxe que vous avez utilisée dans JDK 1.7 pour JDK 1.6


0 commentaires