2012-01-10 18 views
7

मैं उबंटू पर ग्रहण + एंड्रॉइड एसडीके का उपयोग कर रहा हूं।enum के नाम को प्रिंट करना

मैं एक सेंसर प्रकार डिवाइस का नाम मुद्रित करना चाहता हूं, वहां A LOT OF THEM है और मैं इसे स्वचालित रूप से करना चाहता हूं।

तो मैं एक

Log.d("SENSORTYPE","Type: " + tempSensor.getType()) 

का उपयोग मैं (int) प्रकार प्रिंट, लेकिन मैं नाम जिसे enum का उपयोग करना चाहते हैं।

मैं यह कैसे कर सकता हूं?

अग्रिम में Thants।

+1

नहीं है नहीं करना चाहती कर सकते हैं "getName()" विधि काम कर रहा है ?? – rajpara

उत्तर

13

enumerations के लिए, आप इस जैसे बहुत आसानी से कोड का उपयोग कर उन पर सभी स्थिरांक की एक सरणी और पाश प्राप्त कर सकते हैं:

for(YourEnum value: YourEnum.values()){ 
    System.out.println("name="+value.name()); 
} 

हालांकि, Sensor वर्ग आप लिंक एक नहीं है गणना, लेकिन स्थिरांक की एक सूची है। सभी स्थिरांक नामों को निर्दिष्ट किए बिना गणना की तरह उस सूची पर प्रोग्रामेटिक रूप से लूप करने का कोई तरीका नहीं है।

हालांकि, अगर आप उदाहरण के लिए, एक स्थिर देखने कि स्ट्रिंग मान का उपयोग करना चाहते करने के लिए ints नक्शे बना सकते हैं

Map<Integer,String> lookup = new HashMap<Integer,String>(); 
lookup.put(TYPE_ACCELEROMETER,"Accelerometer"); 
//Code a put for each TYPE, with the string you want to use as the name 

आप इस तरह इस का उपयोग कर सकते हैं:

Log.d("SENSORTYPE","Type: " + lookup.get(tempSensor.getType())); 

यह दृष्टिकोण इसका मतलब है कि आपको अभी भी प्रत्येक निरंतर लिखना होगा और अगर स्थिरांक बदलते हैं तो सूची अपडेट करें, लेकिन आपको केवल एक बार ऐसा करना होगा। यह देखने के लिए कि आप कितनी व्यापक रूप से इसका पुन: उपयोग करना चाहते हैं, इस पर निर्भर करते हुए लुकअप को किसी प्रकार की सहायक विधि या कक्षा में लपेटना अच्छा विचार होगा।

3
Log.d("SENSORNAME", "NAME: " + tempSensor.name()); 
4

आप एक abstract विधि लागू करने और हर enumeration

enum Colour { 

Red { 

    @Override 
    String colourName() { 
     return "Red"; 
    } 
}; 

abstract String colourName(); 
} 

इस तरह आप अधिक लचीलापन प्रदान करता में इसे लागू, उदाहरण के लिए, यदि आप अपने कार्यक्रम संबंधी नाम प्रदर्शित करने

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