2010-03-11 13 views
14

में Google संग्रह के BiMap को तुरंत चालू करने के लिए आप Google संग्रह के Bimap को कैसे चालू कर सकते हैं?जावा

मैं सवाल Java: Instantiate Google Collection's HashBiMap

मेरी कोड

import com.google.common.collect.BiMap; 

public class UserSettings { 

private Map<String, Integer> wordToWordID; 

UserSettings() { 

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

का एक नमूना मैं cannot instantiate the type BiMap<String, Integer> मिल पढ़ा है।

उत्तर

33

जैसा कि जुड़े हुए प्रश्न में बताया गया है, आपको create() फैक्ट्री विधियों का उपयोग करना होगा।

आपके मामले में, इस

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

बदलते मतलब है

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

हम्म। आपका जवाब एक नया सवाल उठाता है। ** EnumBimap के पास पैरामीटर के बिना विधि 'बनाने' क्यों नहीं है, जैसे हैशबीमैप? ** –

+0

@ मासी: यह एक अच्छा सवाल है। मेरा मानना ​​है कि कारण यह है क्योंकि EnumBimap को यह जानने की जरूरत है कि इसके पैरामीटर क्या हैं, और टाइप एरर के कारण यह तब तक नहीं जान सकता जब तक आप किसी भी समय 'क्लास' ऑब्जेक्ट्स को पास नहीं करते। मानक लाइब्रेरी में 'एनमैप' और 'एनमसेट' के बारे में भी यही सच है। –

+0

तो यह केवल 'प्रकारों को जानने के लिए' EnumMap' के लिए पर्याप्त नहीं है। यह स्पष्ट रूप से इनपुट डेटा की सामग्री के आधार पर कुछ प्रसंस्करण करता है। –

6

BiMap के लिए एक इंटरफेस है, और इस तरह के रूप instantiated नहीं किया जा सकता है। आपको इच्छित गुणों के अनुसार एक ठोस उप-वर्ग को तत्काल करने की आवश्यकता है, उपलब्ध उप-वर्ग (जावाडोक के अनुसार) EnumBiMap, EnumHashBiMap, HashBiMap, ImmutableBiMap हैं।

6

बायमैप बनाने का एक और अच्छा तरीका है, लेकिन इस मामले में एक अपरिवर्तनीय बायमैप 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

मुझे लगता है कि यह कुछ मामलों में माइकल के जवाब से भी बेहतर है। दक्षता के लिए अपरिवर्तनीय, नल नहीं है। तुम क्या सोचते हो? मुझे लगता है कि सवाल पूछने के बाद यह सुविधा दिखाई दी। इसके बारे में मैनुअल http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html –

+0

javadocs @ मासी के लिए प्रॉप्स, यह मेरे लिए नहीं हुआ था उन्हें यहाँ भी। मुझे लगता है कि अपरिवर्तनीय बनाम उत्परिवर्तन एक अलग चर्चा है, लेकिन जैसा कि मैं हमेशा अपरिवर्तनीय वस्तुओं का उपयोग करता हूं, मैंने सोचा कि कम से कम इस तरह का उल्लेख उल्लेखनीय था। –