inicjalizacja ImmutableMap Guava

Guava oferuje ładny skrót do inicjalizacji mapy. Jednak dostaję następujący błąd kompilatora (Eclipse Indigo), gdy moja Mapa inicjalizuje się do dziewięciu wpisów.

Metoda of(K, V, K, V, K, V, K, V, K, V) w typie ImmutableMap nie ma zastosowania do argumentów (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"
        );

Wiadomość wydaje się mówić, że

ImmutableMap ma maksymalny rozmiar czterech par klucza, wartości.

Oczywiście, to nie może być przypadek, ale nie mogę dowiedzieć się, co zrobić, aby Zwiększ rozmiar mojego inicjalizatora.

Czy ktoś może mi powiedzieć, czego brakuje?
Author: user903724, 2012-02-28

3 answers

Zwróć uwagę, że Twój komunikat o błędzie zawiera tylko pięć par K, V, łącznie 10 argumentów. Klasa ImmutableMap zapewnia sześć różnych metod of(), akceptujących od zera do pięciu par klucz-wartość. Nie istnieje przeciążenie of(...) akceptujące parametr varags, ponieważ K i V mogą być różnymi typami.

Chcesz 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();
 267
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-22 08:09:50

Jeśli mapa jest krótka możesz zrobić:

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

Jeśli jest dłuższy to:

ImmutableMap.builder()
   .put(key, value)
   .put(key2, value2)
   // ...
   .build();
 63
Author: Nathan Feger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 10:23:42

"put" został przestarzały , powstrzymaj się od używania, użyj .of instead

ImmutableMap<String, String> myMap = ImmutableMap.of(
    "city1", "Seattle",
    "city2", "Delhi"
);
 -1
Author: coda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-26 23:17:34