Java 初始化番石榴ImmutableMap
Guava为初始化地图提供了一个很好的快捷方式。但是,当我的映射初始化为9个条目时,我会出现以下编译器错误(EclipseIndigo) 类型Java 初始化番石榴ImmutableMap,java,dictionary,guava,Java,Dictionary,Guava,Guava为初始化地图提供了一个很好的快捷方式。但是,当我的映射初始化为9个条目时,我会出现以下编译器错误(EclipseIndigo) 类型ImmutableMap中(K,V,K,V,K,V,K,K,K,K,V)的方法不适用于参数 (字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串) ImmutableMap myMap=ImmutableMap.of( “键1”、“值1”, “键2”、“值2”, “
ImmutableMap
中(K,V,K,V,K,V,K,K,K,K,V)的方法不适用于参数
(字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串)
ImmutableMap myMap=ImmutableMap.of(
“键1”、“值1”,
“键2”、“值2”,
“键3”、“值3”,
“键4”、“值4”,
“键5”、“值5”,
“键6”、“值6”,
“键7”、“值7”,
“键8”、“值8”,
“键9”、“值9”
);
消息似乎说
ImmutableMap的最大大小为四对键、值
显然,情况并非如此,但我不知道如何增加初始值设定项的大小
有人能告诉我遗漏了什么吗?请注意,您的错误消息只包含五对K,V
对,总共10个参数。这是故意的;ImmutableMap类提供了六种不同的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();
ImmutableMap myMap=ImmutableMap.builder()
.put(“键1”、“值1”)
.put(“键2”、“值2”)
.put(“键3”、“值3”)
.put(“键4”、“值4”)
.put(“键5”、“值5”)
.put(“键6”、“值6”)
.put(“键7”、“值7”)
.put(“键8”、“值8”)
.put(“键9”、“值9”)
.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.of(
"city1", "Seattle",
"city2", "Delhi"
);
ImmutableMap myMap=ImmutableMap.of(
“城市1”、“西雅图”,
“城市2”、“德里”
);
感谢您的快速回答。我决定试试番石榴,因为我不想输入标准地图初始值设定项所需的所有“puts”。那个主意就到此为止@user903724:在这里使用Guava的主要原因是强大的不变性,依我看,这或者说稍微减少了内存消耗——而且生成器语法非常流畅。好吧,你可能还有多个PUT,但他们现在使用的是fluent API,因此,无需为每个重复myMap
。请注意Jon的示例代码可以是公共静态final
,并且仍然有效,不需要帮助器方法或静态{}
初始值设定项!除了可读性之外,您还可以对多达五个键值对使用ImmutableMap.of
static factory。那么你必须使用生成器。不。不推荐使用ImmutableMap.put。Jon Skeet正在使用ImmutableMap.Builder.put,这正是我们应该如何初始化包含5个以上元组的映射。
ImmutableMap<String, String> myMap = ImmutableMap.of(
"city1", "Seattle",
"city2", "Delhi"
);