2016-08-05 8 views
7

मैं मानचित्र कैसे घोषित कर सकता हूं जिनकी कुंजी में कोई enum हो सकता है?जावा: कुंजी के रूप में किसी भी enum के साथ मानचित्र

उदाहरण के लिए, मेरे पास दो enum फल और सब्जी है।

मैं नक्शा जहां कुंजी दोनों फल सब्जी की है, लेकिन केवल enumerations हो सकता है कैसे घोषणा कर सकते हैं, वस्तु नहीं?

मेरा मतलब है, की तरह

Map<???, String> myMap... 

उत्तर

18
  1. आप java.lang.Enum कुंजी के रूप में उपयोग कर सकते हैं।

    enum Fruit { 
        Apple 
    } 
    
    Map<java.lang.Enum<?>, String> mp = new HashMap<>(); 
    mp.put(Fruit.Apple, "myapple"); 
    
  2. अपने enums में लागू करने के लिए इंटरफ़ेस बनाएं। यह विधि आपको अधिक नियंत्रण देती है।

    interface MyEnum{} 
    
    enum Fruit implements MyEnum { 
        Apple 
    } 
    
    Map<MyEnum, String> mp = new HashMap<>(); 
    mp.put(Fruit.Apple, "myapple"); 
    
+0

मैं एक EnumMap के रूप में यह कुंजी के रूप में enum के साथ नक्शे के लिए अनुकूलित है, एक HashMap के बजाय का उपयोग करने का सुझाव देते हैं। –

8

यदि आप एक नक्शा जहां दो प्रकार के उदाहरण कुंजी हो सकता है की घोषणा करना चाहते हैं अपने दो enums के लिए एक आम महाप्रकार की आवश्यकता है कुछ। एक मानचित्र में केवल एक कुंजी प्रकार हो सकता है, लेकिन यदि आपके पास दो प्रकार के उप प्रकार के साथ एक प्रकार है, तो यह ठीक है।

आप enums के लिए सुपर-क्लास (यह हमेशा java.lang.Enum है) को बदल नहीं सकते, लेकिन आप उन्हें इंटरफेस को लागू कर सकते हैं। तो क्या आप कर सकते हैं यह है:

interface FruitOrVegetable { 
} 

enum Fruit implements FruitOrVegetable { 
} 

enum Vegetable implements FruitOrVegetable { 
} 

class MyClass { 
    Map<FruitOrVegetable, String> myMap; 
} 

सवाल यह है: क्या enums फल सब्जी की है कि आप इंटरफ़ेस में शामिल कर सकते हैं साझा व्यवहार है। व्यवहार के बिना एक इंटरफ़ेस सुंदर व्यर्थ है। आपको instanceof चेक करने और लगातार Fruit या Vegetable के रूप में कुछ करने के लिए जांच करने की आवश्यकता होगी।

शायद आपके मामले में, आपको वास्तव में एक सिंगल enum FruitOrVegetable की आवश्यकता है - यदि आप उन्हें एक दूसरे के साथ व्यवहार करने में सक्षम होना चाहते हैं।

संबंधित मुद्दे