2010-06-09 7 views
6

चलें कहते हैं कि मैं एक साधारण Enum पशु कहा जाता है के रूप में परिभाषित किया है:मैं कक्षा नाम दिए गए एक enum "valueOf" कैसे कर सकता हूं?

public enum Animal { 
    CAT, DOG 
} 

और मैं की तरह एक विधि है:

private static Object valueOf(String value, Class<?> classType) { 
    if (classType == String.class) { 
     return value; 
    } 

    if (classType == Integer.class) { 
     return Integer.parseInt(value); 
    } 

    if (classType == Long.class) { 
     return Long.parseLong(value); 
    } 

    if (classType == Boolean.class) { 
     return Boolean.parseBoolean(value); 
    } 

    // Enum resolution here 

}

क्या मैं इस विधि के अंदर डाल सकते हैं एक वापस जाने के लिए मेरे enum का उदाहरण जहां मूल्य वर्ग प्रकार का है?

मैं कोशिश कर रहा पर ध्यान दिया है:

if (classType == Enum.class) { 
     return Enum.valueOf((Class<Enum>)classType, value); 
    } 

लेकिन वह काम नहीं करता।

उत्तर

8

आपका classTypeEnum नहीं है, यह Animal है। तो,

if (classType.isEnum()) { 
    return Enum.valueOf(classType, value); 
} 

काम करना चाहिए। इसके अतिरिक्त, आपको क्लास इंस्टेंस की तुलना करने के लिए == के बजाय equals() का उपयोग करना चाहिए (हालांकि == अभ्यास में काम करेगा, अगर केवल एक क्लासलोडर है)।

+2

लेकिन कक्षा बराबर नहीं है(), तो मुझे लगता है कि बराबर() कई वर्ग लोडर होने पर काम नहीं करेगा। – waxwing

+1

उम्म, मुझे लगता है कि आप सही हैं। असल में मुझे नहीं पता कि कितने वर्ग लोडर एक साथ काम करते हैं, न ही यदि यह वास्तव में संभव है (या यहां तक ​​कि संभव है) कि एक ही कक्षा वस्तु के कई उदाहरण हैं। शायद 'कक्षा # isAssignableFrom() 'भी इस्तेमाल किया जा सकता है। उस ने कहा, 'बराबर() 'का उपयोग करना शायद ही गलत है। –

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