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<>();
5 Réponses :
Le Recherchez Type Inference pour la création d'instance générique Points forts des changements de technologie dans Java SE 7 strong>. P> Je voudrais une explication mais cette syntaxe et pourquoi cela fonctionne pour 1.7. P>
blockQuote> Voici cette explication (légèrement adaptée) de Oracle lui-même : P> 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 p> Dans cet exemple, le compilateur nouveau hashmap <> () code> (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.
<> code>) strong>. Considérez l'exemple suivant, qui est valide pour Java SE 7 et plus tard: P>
blockQuote>
INTEGER code> pour le paramètre de type formel, x code>, de la classe générique myClass chaîne code> pour le paramètre de type formel, t code> du constructeur de cette classe générique. P>
blockQuote> p>
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
Dans Java SE 7, vous pouvez remplacer le type paramétré du constructeur avec un ensemble de paramètres de type vide (<>): p>
xxx pré> en Java SE 6 Il fallait être fait de cette façon: p>
xxx pré> Plus de détails ... P> blockQuote>
Vous ne pouvez pas utiliser la même syntaxe que vous avez utilisée dans JDK 1.7 pour JDK 1.6 P>
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.