答案/编辑:

好的,刚意识到我试图错误地使用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或看到任何示例?如果是这样,怎么办?

最佳答案

您的意思是(番石榴version 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)


因此IntegerString不适合K或V。

关于java - 如何实例化 Guava EnumBiMap?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14907667/

10-08 22:38