2010-03-11 6 views
14

Wie können Sie eine Bimap von Google-Sammlungen instanziieren?BiMap von Google-Sammlungen in Java instanziieren

Ich habe die Frage gelesen Java: Instantiate Google Collection's HashBiMap

Eine Probe von meinem Code

import com.google.common.collect.BiMap; 

public class UserSettings { 

private Map<String, Integer> wordToWordID; 

UserSettings() { 

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

I cannot instantiate the type BiMap<String, Integer> bekommen.

Antwort

33

Wie in der verknüpften Frage angegeben, sollen Sie die create() Factory-Methoden verwenden.

In Ihrem Fall bedeutet dies

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

zu

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

Hmm. Ihre Antwort wirft eine neue Frage auf. ** Warum hat EnumBimap nicht die Methode 'create' ohne Parameter, wie HashBiMap? ** –

+0

@Masi: Das ist eine gute Frage. Ich glaube, der Grund dafür ist, dass EnumBimap wissen muss, was seine Parameter sind, und wegen der Typauslöschung kann es nicht wissen, es sei denn, Sie übergeben die "Class" -Objekte zu einem bestimmten Zeitpunkt. Dasselbe gilt für "EnumMap" und "EnumSet" in der Standardbibliothek. –

+0

Es ist also nicht genug, dass 'EnumMap' nur die Typen kennt. Es macht anscheinend eine gewisse Verarbeitung basierend auf dem Inhalt der Eingabedaten. –

6

Eine andere coole Möglichkeit, eine BiMap zu erstellen, aber in diesem Fall eine unveränderliche BiMap, verwendet die 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

Ich denke, das ist sogar besser als Michaels Antwort in einigen Fällen. Unveränderlich für Effizienz, keine Nullen. Was denken Sie? Ich denke, dieses Feature erschien, nachdem ich die Frage gestellt hatte. Handbuch darüber hier http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html –

+0

Requisiten für die Javadocs @Masi, es ist mir nicht in den Sinn gekommen zu setzen sie auch hier. Ich denke, dass Unveränderlichkeit gegen Veränderlichkeit eine andere Diskussion ist, aber da ich immer unveränderliche Objekte benutze, dachte ich, dass zumindest dieser Weg eine Erwähnung wert war. –