инициализация Guava ImmutableMap - PullRequest
124 голосов
/ 29 февраля 2012

Гуава предлагает хороший ярлык для инициализации карты.Однако я получаю следующую ошибку компилятора (Eclipse Indigo), когда моя карта инициализируется девятью записями.

Метод of(K, V, K, V, K, V, K, V, K, V) в типе ImmutableMap не применим для аргументов (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"
        );

Появляется сообщение о том, что

ImmutableMap имеет максимальный размер из четырех пар ключ-значение.

Очевидно, что это не может быть так, но я не могу понять, что делать, чтобы увеличить размер моего инициализатора.

Может кто-нибудь сказать мне, чего не хватает?

Ответы [ 3 ]

229 голосов
/ 29 февраля 2012

Обратите внимание, что ваше сообщение об ошибке содержит только пять K, V пар, всего 10 аргументов. Это по замыслу; класс ImmutableMap предоставляет шесть различных of() методов, которые принимают от нуля до пяти пар ключ-значение. Не существует перегрузки of(...), принимающей параметр varags, потому что K и V могут быть разных типов.

Вы хотите 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();
59 голосов
/ 29 февраля 2012

если карта короткая, вы можете сделать:

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

Если оно длиннее, то:

ImmutableMap.builder()
   .put(key, value)
   .put(key2, value2)
   // ...
   .build();
0 голосов
/ 27 июня 2019

"put" был устарел , воздержитесь от его использования, используйте вместо .of

ImmutableMap<String, String> myMap = ImmutableMap.of(
    "city1", "Seattle",
    "city2", "Delhi"
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...