2010-05-14 18 views
7

में उपयोग मैं एक Enum परिभाषित जो "स्ट्रिंग", फ्लोट, सूची, डबल आदि जैसे विधि वापसी प्रकार शामिलEnums, स्विच मामले

मैं स्विच मामले बयान में इसका उपयोग करने दिया जाएगा। उदाहरण के लिए मेरी enum

public enum MethodType { 
    DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG; 
} 

एक संपत्ति फ़ाइल में है, मैं कुंजी मान युग्म है इस प्रकार है। टेस्ट 1 = स्ट्रिंग टेस्ट 2 = डबल

मेरे कोड में मुझे कुंजी के लिए मूल्य मिल रहा है। मुझे टाइप का निर्धारण करने के लिए स्विच केस में VALUE का उपयोग करने की आवश्यकता है और इसके आधार पर मुझे कुछ तर्क लागू करना है। इस लागू करने के लिए उदाहरण के लिए कुछ इस तरह

switch(MethodType.DOUBLE){ 
    case DOUBLE: 
     //Dobule logic 
} 

कोई मेरी मदद कर सकते हैं?

उत्तर

17

मुझे लगता है कि यह आपके लिए क्या देख रहे है:

public class C_EnumTest { 
    public enum MethodType { 
     DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG; 
    } 
    public static void main(String[] args) { 
     String value = "DOUBLE"; 
     switch(MethodType.valueOf(value)) { 
     case DOUBLE: 
      System.out.println("It's a double"); 
      break; 
     case LIST: 
      System.out.println("It's a list"); 
      break; 
     } 
    } 
} 

केस संवेदी आप एक MethodType.valueOf(value.toUpperCase()) कर सकता है नहीं किया जा रहा है।

+0

यह वही है जो मैं ढूंढ रहा था। क्या MethodType.valueOf के लिए एक अनदेखा जांच संभव है? – Apps

+0

सहायता प्रदान करने के लिए सभी को धन्यवाद। – Apps

+0

केस संवेदनशील होने के कारण बस एक पंक्ति जोड़ा गया। – tangens

5

आपने enum को परिभाषित किया है, लेकिन आपको उस चर को परिभाषित करने की आवश्यकता है जो है। इस तरह:

public enum MethodType { ... } 

public MethodType myMethod; 

switch (myMethod) 
{ 
    case MethodType.DOUBLE: 
     //... 
     break; 
    case MethodType.LIST: 
     //... 
     break; 
//... 
} 

संपादित करें:

इससे पहले, इस स्निपेट चर नाम के रूप में इस्तेमाल var, लेकिन वह एक आरक्षित कीवर्ड है। myMethod में बदल गया।

+0

लेकिन मेरे मामले में मुझे संपत्ति फ़ाइल से कुंजी के आधार पर मूल्य प्राप्त होगा। उदाहरण के लिए मेरा मान "स्ट्रिंग" होगा, मुझे स्विच केस में इसका उपयोग करने की आवश्यकता है। क्या इसके लिए कोई वैकल्पिक दृष्टिकोण है। कृपया क्या आप मुझे बता सकते है? – Apps

+0

मुझे पूरा यकीन नहीं है कि मैं समझता हूं कि आपका क्या मतलब है। यदि आप अधिक कुंजी/मूल्य जोड़े की तलाश में हैं, तो आप इसके बजाय एक शब्दकोश का उपयोग करना चाहेंगे। यदि आप देखना चाहते हैं कि कोई मान किस प्रकार है, उदाहरण के लिए यदि var * एक * डबल है, तो कोड 'अगर (var दोगुना है) {// do stuff} ' – JYelton

3

आप (इस जावा में है btw तो आपके लिए काम नहीं हो सकता है) सब पर एक स्विच की जरूरत नहीं है: जाहिर है आप कुछ अशक्त चेकों जोड़ना चाहें, बेहतर अपवाद हैंडलिंग, आदि

public enum MethodType { 

     String,LONG,DOUBLE,THING; 

     static MethodType fromString(String x) throws Exception { 
      for (MethodType currentType: MethodType.values()){ 
       if (x.equals(currentType.toString())){ 
        return currentType; 
       } 
      } 
      throw new Exception("Unmatched Type"); 
     } 
    } 
+0

और यह भी प्रतिबंध है कि स्ट्रिंग से मेल खाता है विधि टाइप का प्रतिनिधित्व। यदि यह एक समस्या है, तो आप एक सारणी स्ट्रिंग प्रस्तुतिकरण विधि को परिभाषित कर सकते हैं और प्रत्येक विधि प्रकार – StevenWilkins

+1

के लिए इसे कार्यान्वित कर सकते हैं यह ठीक है कि सभी enums के 'valueOf (स्ट्रिंग)' स्थिर विधि क्या है, उदा। 'MethodType.valueOf (" डबल ") == विधि टाइप। DOUBLE'। – ZoogieZork

+0

@ZoogieZork - आप सही हैं, उत्कृष्ट बिंदु, पूरी तरह से मेरे दिमाग फिसल गया। – StevenWilkins

5

यह आपकी आवश्यकता के हिसाब से थोड़ा सा हो सकता है। आप इस मामले में संपत्ति की संपत्ति को कुछ भी कर सकते हैं:

public enum MethodType { 

    STRING("String"), 
    LONG("Long"), 
    DOUBLE("Double"), 
    THING("Thing"); 

    private String propertyName; 

    MethodType(String propName) { 
    this.propertyName = propName; 
    } 

    public String getPropertyName() { 
    return propertyName; 
    } 

    static MethodType fromPropertyName(String x) throws Exception { 
    for (MethodType currentType : MethodType.values()) { 
     if (x.equals(currentType.getPropertyName())) { 
     return currentType; 
     } 
    } 
    throw new Exception("Unmatched Type: " + x); 
    } 
} 
संबंधित मुद्दे