web-dev-qa-db-fra.com

initialisation d'une carte immuable de goyave

Goyave offre un raccourci Nice pour initialiser une carte. Cependant, l'erreur de compilateur suivante (Eclipse Indigo) apparaît lorsque ma carte est initialisée à neuf entrées.

La méthode of(K, V, K, V, K, V, K, V, K, V) dans le type ImmutableMap n'est pas applicable pour les arguments (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String)

ImmutableMap<String,String> myMap = ImmutableMap.of(
        "key1", "value1", 
        "key2", "value2", 
        "key3", "value3", 
        "key4", "value4", 
        "key5", "value5", 
        "key6", "value6", 
        "key7", "value7", 
        "key8", "value8", 
        "key9", "value9"
        );

Le message semble dire que

Un ImmutableMap a une taille maximale de quatre paires de clé, valeur.

Évidemment, cela ne peut pas être le cas, mais je ne sais pas quoi faire pour augmenter la taille de mon initialiseur.

Quelqu'un peut-il me dire ce qui manque?

127
user903724

Notez que votre message d'erreur ne contient que cinq paires K, V, Soit 10 arguments au total. C'est par conception; la classe ImmutableMap fournit six méthodes of() différentes, acceptant entre zéro et cinq paires clé-valeur. Il n'y a pas de surcharge of(...) acceptant un paramètre varags car K et V peuvent être de types différents.

Vous voulez un ImmutableMap.Builder:

ImmutableMap<String,String> myMap = ImmutableMap.<String, String>builder()
    .put("key1", "value1") 
    .put("key2", "value2") 
    .put("key3", "value3") 
    .put("key4", "value4") 
    .put("key5", "value5") 
    .put("key6", "value6") 
    .put("key7", "value7") 
    .put("key8", "value8") 
    .put("key9", "value9")
    .build();
234
Jon Skeet

si la carte est courte, vous pouvez faire:

ImmutableMap.of(key, value, key2, value2); // ...up to five k-v pairs

Si c'est plus long alors:

ImmutableMap.builder()
   .put(key, value)
   .put(key2, value2)
   // ...
   .build();
59
Nathan Feger

"put" a été obsolète , abstenez-vous de l'utiliser, utilisez .of à la place

ImmutableMap<String, String> myMap = ImmutableMap.of(
    "city1", "Seattle",
    "city2", "Delhi"
);
0
coda