答案/编辑:
好的,刚意识到我试图错误地使用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)
因此
Integer
和String
不适合K或V。关于java - 如何实例化 Guava EnumBiMap?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14907667/