2011-05-19 15 views
5

मैंने अतीत में जावा में enums का उपयोग किया है लेकिन किसी कारण से मुझे अभी एक अजीब त्रुटि मिल रही है। कोड है कि यह त्रुटि फेंक है लाइन है:enum valueOf IllegalArgumentException: कोई enum const class

switch(ConfigProperties.valueOf(line[0].toLowerCase()){ 
    ... 
} 

मैं हो रही है एक

java.lang.IllegalArgumentException: No enum const class 
    allautomator.ConfigProperties.language 
उदाहरण लाइन में

स्ट्रिंग्स की एक सरणी है।

मैं अभी वास्तव में वास्तव में उलझन में हूं, मुझे नहीं पता कि संभवतः क्या गलत हो सकता है।

+2

और आपका enum कैसा दिखता है? – Bozho

+1

कृपया अपना enum और लाइन का मान पोस्ट करें [0]। ValueOf फ़ंक्शन एक EXACT स्ट्रिंग की अपेक्षा करता है। कोई अतिरिक्त रिक्त स्थान, विराम चिह्न, आदि। मुझे नहीं पता कि यह मामला संवेदनशील है या नहीं, लेकिन मैं इसे अभी मानता हूं। –

+0

क्या आप अपनी एनम कक्षा और लाइन सरणी की सामग्री भी जोड़ सकते हैं? बस यह सुनिश्चित करने के लिए कि हम देख सकते हैं कि इनपुट क्या हैं और आपके पास क्या है। –

उत्तर

16

enum स्थिरांक केस संवेदनशील हैं, इसलिए सुनिश्चित करें कि आप स्थिरांक वास्तव में कम मामले हैं। इसके अलावा, मैं सुझाव है कि आप trim() इनपुट के रूप में अच्छी तरह से वहाँ में सुनिश्चित करें कि कोई प्रमुख/अनुगामी white-space चुपके बनाने के लिए:

enum ConfigProperties { prop1, prop2 } 

class Test { 
    public static void main(String[] args) { 

     String[] line = { "prop1" }; 

     switch (ConfigProperties.valueOf(line[0].toLowerCase())) { 
     case prop1: System.out.println("Property 1"); break; 
     case prop2: System.out.println("Property 2"); break; 
     } 
    } 
} 
:

ConfigProperties.valueOf(line[0].toLowerCase().trim()) 

संदर्भ के लिए, एक काम कर नमूना अपनी लाइन युक्त कार्यक्रम है

आउटपुट:

Property 1 
+0

मैंने इस मामले को सुनिश्चित किया है और वे कम मामले में हैं लेकिन ट्रिम वह है जो मुझे करने की ज़रूरत है। धन्यवाद। –

+0

आपका स्वागत है! – aioobe

+1

@ajoobe आप एक enum प्रकार पर 'valueOf()' को कॉल कर रहे हैं। लेकिन मुझे यह विधि [javadocs] (http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html) में नहीं दिखाई दे रही है। ऐसा क्यों? विधि घोषणा 'सार्वजनिक स्थैतिक <टी की तरह दिखती है Enum > टी valueOf (कक्षा enumType, स्ट्रिंग नाम) '। यहां आप केवल दूसरे पैरामीटर को पार कर रहे हैं? मुझे यहां क्या समझ नहीं आ रहा है? – Geek

0

मैं एक समान अवधारणा का उपयोग कर रहा है, लेकिन असफल होने की स्थिति में एक डिफ़ॉल्ट मान होने

public enum SortType { 

    PRICE_ASC("price_asc"), 
    PRICE_DESC("price_desc"), 
    MODEL_ASC("model_asc"), 
    MODEL_DESC("model_desc"); 

    private String name; 

    SortType(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    static public SortType lookup(String id, SortType defaultValue) { 
     try { 
      return SortType.valueOf(id); 
     } catch (IllegalArgumentException ex) { 
      return defaultValue; 
     } 
    } 
}