2013-02-16 91 views
1

回答/編輯:如何實例化guava EnumBiMap?

好吧,剛剛意識到我試圖錯誤地使用EnumBiMap。我想要一個不允許空值的bi map,我猜Guava library沒有這個值。我看着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(); 

..similar到這裏建議的內容:Java: Instantiate Google Collection's HashBiMap

也試過:

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

..similar在格式化這裏:Google Guava: How to use ImmutableSortedMap.naturalOrder?

和:

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

有沒有人成功實現EnumBiMap或看過任何例子?如果是這樣,怎麼樣?

回答

8

你的意思(番石榴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不適合ķV