2010-03-11 36 views

回答

33

正如鏈接問題所述,您應該使用工廠方法create()

在你的情況,這意味着改變

this.wordToWordID = new BiMap<String. Integer>(); 

this.wordToWordID = HashBiMap.create(); 
+0

嗯。你的回答提出了一個新問題。 **爲什麼EnumBimap沒有沒有參數的'create'方法,比如HashBiMap?** – 2010-03-12 12:16:02

+0

@Masi:這是一個很好的問題。我相信其原因是因爲EnumBimap需要知道它的參數是什麼,並且由於類型擦除,它不能知道,除非在某個時間點將'Class'對象傳遞給它。標準庫中的EnumMap和EnumSet也是如此。 – 2010-03-12 14:07:26

+0

因此,EnumMap'僅僅知道類型是不夠的。它顯然會根據輸入數據的內容進行一些處理。 – 2010-03-12 14:40:58

6

創建BiMap的另一個很酷的方法是使用ImmutableBiMap.Builder,但在這種情況下是不可變的BiMap。

static final ImmutableBiMap<String, Integer> WORD_TO_INT = 
    new ImmutableBiMap.Builder<String, Integer>() 
     .put("one", 1) 
     .put("two", 2) 
     .put("three", 3) 
     .build(); 

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html

+0

我認爲這在某些情況下甚至比邁克爾的回答更好。不變的效率,沒有空值。你怎麼看?我認爲這個功能出現在我問這個問題後。有關它的手冊http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html – 2015-03-21 12:22:21

+0

javadocs @Masi的道具,我沒有想到把他們也在這裏。我猜不可變性與可變性是一個不同的討論,但由於我總是使用不可變的對象,我只是認爲至少這種方式值得一提。 – 2015-03-23 12:42:59