初始化 Guava ImmutableMap

番石榴为初始化映射提供了一个不错的快捷方式。然而,当我的 map 初始化为9个条目时,我得到了下面的编译器错误(Eclipse 靛蓝)。

类型 ImmutableMap中的方法 of(K, V, K, V, K, V, K, V, K, V)不适用于参数 (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 的最大大小为四对 key,value。

显然,情况并非如此,但我不知道如何增加初始化程序的大小。

谁能告诉我少了什么?

134811 次浏览

注意,您的错误消息只包含5个 K, V对,总共10个参数。这是设计好的; ImmutableMap 类提供了六种不同的 of()方法,接受零到五个键值对。没有一个接受 varags 参数的 of(...)重载,因为 KV可以是不同的类型。

你想要 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();

如果地图很短,你可以这样做:

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

如果时间更长,那么:

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

如果你想在性能和可读性之间取得平衡,你可以把两种方法结合起来:

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

这是不是一个好主意,还有待讨论。