如何实例化番石榴EnumBiMap?

ete*_*ech 1 java guava

答/编辑:

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

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

鉴于枚举:

enum Test{
    VAL;
}  
Run Code Online (Sandbox Code Playgroud)

使用:

Map<Test, Test> m = EnumBiMap.create(Test.class, Test.class);
m.put(Test.VAL, Test.VAL);
Run Code Online (Sandbox Code Playgroud)

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

Map<Enum, Enum> m = EnumBiMap.create(Enum.class, Enum.class);
m.put(Test.VAL, Test2.VAL2);
Run Code Online (Sandbox Code Playgroud)

原始问题:

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

Map<Integer, String> m = EnumBiMap.create();
Run Code Online (Sandbox Code Playgroud)

..类似于这里建议的内容:Java:实例化Google Collection的HashBiMap

还尝试过:

Map<Integer, String> m = EnumBiMap.<Integer, String>create();
Run Code Online (Sandbox Code Playgroud)

..类似于格式化:Google Guava:如何使用ImmutableSortedMap.naturalOrder?

和:

Map<Integer, String> m = EnumBiMap.create(Integer.class, String.class);
Run Code Online (Sandbox Code Playgroud)

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

卢声远*_* Lu 8

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

Map<Test, Test> m = EnumBiMap.create(Test.class, Test.class);
m.put(Test.VAL, Test.VAL);
Run Code Online (Sandbox Code Playgroud)

请注意签名:

<K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V> create(Class<K> keyType, Class<V> valueType)
Run Code Online (Sandbox Code Playgroud)

所以,IntegerString不适合ķV.