Инициализация неизменяемой карты Guava
Guava предлагает удобный ярлык для инициализации карты. Однако я получаю следующую ошибку компилятора (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 максимальный размер четырех пар ключа, значение.
Очевидно, этого не может быть, но я не могу понять, что делать, чтобы увеличить размер моего инициализатора.
Может кто-нибудь сказать мне, что не хватает?
Ответы
Ответ 1
Обратите внимание, что ваше сообщение об ошибке содержит только пять пар 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();
Ответ 2
если короткое отображение можно сделать:
ImmutableMap.of(key, value, key2, value2); // ...up to five k-v pairs
Если он длиннее, то:
ImmutableMap.builder()
.put(key, value)
.put(key2, value2)
// ...
.build();
Ответ 3
"put" устарел, воздержитесь от его использования, используйте вместо него .of
ImmutableMap<String, String> myMap = ImmutableMap.of(
"city1", "Seattle",
"city2", "Delhi"
);