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 的最大大小为四对键、值。
显然,情况并非如此,但我不知道如何增加初始化程序的大小。
有人可以告诉我缺少什么吗?
请注意,您的错误消息仅包含五个
K, V
对,总共 10 个参数。这是设计使然; ImmutableMap 类提供了六种不同的 of()
方法,接受零到五个键值对。不存在接受 varags 参数的 of(...)
重载,因为 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();
如果地图很短,你可以这样做:
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();
这是否是一个好主意,还有待讨论。