2010-03-11 4 views

Répondre

33

Comme indiqué dans la question liée, vous devez utiliser les méthodes d'usine create().

Dans votre cas, cela signifie changer

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

à

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

Hmm. Votre réponse soulève une nouvelle question. ** Pourquoi EnumBimap n'a pas la méthode 'create' sans paramètres, comme HashBiMap? ** –

+0

@Masi: C'est une bonne question. Je crois que la raison est parce qu'EnumBimap a besoin de savoir quels sont ses paramètres, et à cause de l'effacement de type il ne peut pas savoir à moins que vous ne lui passiez les objets 'Class' à un moment donné. La même chose est vraie pour 'EnumMap' et' EnumSet' dans la bibliothèque standard. –

+0

Il ne suffit donc pas que 'EnumMap' ne connaisse que les types. Il fait apparemment un traitement basé sur le contenu des données d'entrée. –

6

Une autre manière intéressante de créer une carte BiMap, mais dans ce cas une BiMap immuable, utilise le ImmutableBiMap.Builder.

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

Je pense que c'est encore mieux que la réponse de Michael dans certains cas. Immuable pour l'efficacité, ne pas avoir de null. Qu'est-ce que tu penses? Je pense que cette fonctionnalité est apparue après que j'ai posé la question. Manuel à ce sujet ici http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html –

+0

Les accessoires pour les javadocs @Masi, il ne m'est pas venu à l'idée de mettre eux ici aussi. Je suppose que l'immutabilité contre la mutabilité est une discussion différente, mais comme j'utilise toujours des objets immuables, je pensais juste qu'au moins cette façon valait la peine d'être mentionnée. –

Questions connexes