初始化Guava ImmutableMap

问题

Guava为初始化 Map 提供了一个很好的快捷方式。但是,当我的 Map 初始化为九个条目时,我得到以下编译器错误(Eclipse Indigo)。

类型ImmutableMap中的方法of(K, V, K, V, K, V, K, V, K, V)不适用于arguments(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 热门回答(202 赞)

请注意,你的错误消息仅包含五个K, V对,总共10个参数。这是设计的; ImmutableMap类提供六种不同的方法,接受0到6个键值配对。没有aof(...)overload接受varags参数,因为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();

#2 热门回答(58 赞)

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

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

如果它更长,那么:

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