初始化Guava ImmutableMap

时间:2012-02-28 20:42:34

标签: java dictionary 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的最大大小为四对密钥值。

显然,情况并非如此,但我无法弄清楚如何增加初始化程序的大小。

有人能告诉我缺少什么吗?

3 个答案:

答案 0 :(得分:228)

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

答案 1 :(得分:59)

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

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

如果它更长,那么:

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

答案 2 :(得分:0)

“ put”已被deprecated禁止使用,请改用.of

ImmutableMap<String, String> myMap = ImmutableMap.of(
    "city1", "Seattle",
    "city2", "Delhi"
);