如何初始化Guava ImmutableMap?

问题描述 投票:0回答:3

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 的最大大小为四对键、值。

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

有人可以告诉我缺少什么吗?

java dictionary guava
3个回答
320
投票

请注意,您的错误消息仅包含五个

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();

72
投票

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

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

如果更长的话:

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

1
投票

如果您想在功能和可读性之间取得平衡,您可以结合使用这两种方法:

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();

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

© www.soinside.com 2019 - 2024. All rights reserved.