2

答案/编辑:

好的,刚刚意识到我试图错误地使用 EnumBiMap。我想要一个不允许空值的双映射,我猜 Guava 库没有。我查看了ImmutableBiMap但它应该是静态的,具有不变的值。猜猜我只需要在将任何内容放入 HashBiMap 之前检查 null。

也就是说,这就是您可以实例化/使用 EnumBiMap 的方式:

给定枚举:

enum Test{
    VAL;
}  

利用:

Map<Test, Test> m = EnumBiMap.create(Test.class, Test.class);
m.put(Test.VAL, Test.VAL);

或者,如果您想要一个更通用的 EnumBiMap,它支持任何枚举类型:

Map<Enum, Enum> m = EnumBiMap.create(Enum.class, Enum.class);
m.put(Test.VAL, Test2.VAL2);

原始问题:

我查看了Guava API文档和网络,但找不到任何实现 EnumBiMap 类的示例。它的行为与我可以轻松实例化的 HashBiMap 不同。这是我尝试过的 - 这些都不会为我编译:

Map<Integer, String> m = EnumBiMap.create();

..类似于这里的建议:Java: Instantiate Google Collection's HashBiMap

也试过:

Map<Integer, String> m = EnumBiMap.<Integer, String>create();

..类似于此处的格式:Google Guava: How to use ImmutableSortedMap.naturalOrder?

和:

Map<Integer, String> m = EnumBiMap.create(Integer.class, String.class);

有没有人成功实现 EnumBiMap 或看到任何示例?如果是这样,怎么做?

4

1 回答 1

8

你的意思是(番石榴14.0 版):

Map<Test, Test> m = EnumBiMap.create(Test.class, Test.class);
m.put(Test.VAL, Test.VAL);

请注意签名:

<K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V> create(Class<K> keyType, Class<V> valueType)

所以IntegerandString不适合KV

于 2013-02-16T11:14:03.993 回答