स्ट्रिंग को समकक्ष Enum मान में बदलें


99

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

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

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

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

मैं बहुत आशान्वित नहीं हूं कि यह बिना आईपीएस या केस स्टेटमेंट के संभव है।

जवाबों:


220

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

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

इस प्रकार यदि आपकी एनम को परिभाषित किया गया है:

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

आप ऐसा कर सकते हैं:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);

जी हाँ धन्यवाद बस इस डाउनलोड को
comacle.com/javase/1,5.0/docs/api/java/lang/Enum.html

18

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

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

8

valueOf(String)प्रत्येक के लिए परिभाषित स्थिर विधि का उपयोग करें enum

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


4

मैं 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);
    }
}

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.