2011-08-14 17 views
51

कनवर्ट करें मेरे लिए जावा का उपयोग करके Enumeration में समतुल्य मान पर String को परिवर्तित करना संभव है।स्ट्रिंग को समकक्ष एनम मान

मैं निश्चित रूप से इसे बड़े if-else कथन के साथ कर सकता हूं, लेकिन यदि संभव हो तो मैं इससे बचना चाहूंगा।

इस दस्तावेज़ को देखते हुए:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html

मैं भी उम्मीद है कि इस भारतीय विदेश सेवा या एक मामले बयान के बिना संभव है नहीं कर रहा हूँ।

उत्तर

123

आपको पता आशा है, java.util.Enumeration से अलग है जावा 1.5 Enum प्रकार।

समकक्ष एनम प्रकार प्राप्त करने के लिए आप बस YourEnum.valueOf("String") का उपयोग कर सकते हैं।

इस प्रकार अपने enum इतनी के रूप में परिभाषित करता है, तो है:

public enum Day { 
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
} 

आप ऐसा कर सकता है: स्थिर विधि valueOf(String)

String day = "SUNDAY"; 

Day dayEnum = Day.valueOf(day); 
+0

हाँ धन्यवाद, यह सिर्फ http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html देखा – Ankur

13

आप जावा 5 enums (जो इतना कुछ के बाद से आप पुराने Enumeration वर्ग का उल्लेख नहीं है) का उपयोग मान लिया जाये, तो आप java.lang.Enum उपवर्ग के valueOf विधि का उपयोग कर सकते हैं:

MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS"); 
4

उपयोग प्रत्येक enum के लिए परिभाषित किया।

उदाहरण के लिए यदि आप enum MyEnum है आप कह सकते हैं MyEnum.valueOf("foo")

0

मैं एहसास है कि Type.valueOf("enum string") वास्तव में अस्तित्व में बिना अपने ही समाधान ओवर-इंजीनियर है हो सकता है।

मुझे लगता है कि यह अधिक बारीक नियंत्रण देता है लेकिन मुझे यकीन नहीं है कि यह वास्तव में आवश्यक है।

public enum Type { 
    DEBIT, 
    CREDIT; 

    public static Map<String, Type> typeMapping = Maps.newHashMap(); 
    static { 
     typeMapping.put(DEBIT.name(), DEBIT); 
     typeMapping.put(CREDIT.name(), CREDIT); 
    } 

    public static Type getType(String typeName) { 
     if (typeMapping.get(typeName) == null) { 
      throw new RuntimeException(String.format("There is no Type mapping with name (%s)")); 
     } 
     return typeMapping.get(typeName); 
    } 
} 

मैं तुम्हें RuntimeException (या जो भी अपवाद आप फेंक करना चाहते हैं) के लिए IllegalArgumentException जो संभवतः कोड को साफ कर सकता है का आदान प्रदान कर रहे हैं लगता है।

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