Comment utiliser les littéraux de collection dans Java 7?

J’ai essayé la ligne suivante:

Map map={new Character('r'):Color.red,new Character('b'):Color.black}; 

Mais Netbeans 7 rejette ceci, avec le message d’erreur '{' expected, ';' expected '{' expected, ';' expected

J’ai défini le format Source / Binary comme étant «JDK 7» et la plate-forme sur «JDK 1.7». Dois-je faire autre chose?

Ni Java 7 ni Java 8 ne prennent en charge les littéraux de collection, comme indiqué dans cette question: les améliorations apscopes à la collection Project Coin seront-elles dans JDK8?

Vous pouvez utiliser la bibliothèque Google de goyaves si vous n’avez besoin que de collections immuables. ImmutableList , ImmutableSet et ImmutableMap ont plusieurs méthodes d’usine surchargées ou même des constructeurs qui facilitent la création de collections:

 List list = ImmutableList.of(1, 1, 2, 3, 5, 8, 13, 21); Set set = ImmutableSet.of("foo", "bar", "baz", "batman"); Map map = ImmutableMap.of(1, "one", 2, "two", 3, "three"); 

MODIFIER

Java 9 a ajouté des méthodes de collecte similaires à celles de Guava:

 List.of(a, b, c); Set.of(d, e, f, g); Map.of(k1, v1, k2, v2) Map.ofEnsortinges( entry(k1, v1), entry(k2, v2), entry(k3, v3), // ... entry(kn, vn) ); 

Vous devez définir une implémentation de carte concrète, éventuellement combinée à une initialisation à double accolade:

 Map map = new HashMap() {{ put(new Character('r'), Color.red); put(new Character('b'), Color.black ); }}; 

Pour développer un peu la réponse de Thomas … Map est une interface et doit être instanciée via l’une des implémentations concrètes associées (HashMap, TreeMap ou LinkedHashMap). C’est encore une bonne pratique. Toutefois, pour déclarer votre variable de référence comme implémentation d’interface plutôt que comme concret, cela vous donnera une flexibilité future.

En ce qui concerne l’extrait de code, cependant, je pense que vous avez toujours besoin des paires clé-valeur définies dans le côté affectation de la déclaration. Donc, je changerais:

 Map map = new HashMap<>() {{ 

à

 Map map = new HashMap() {{