2010-11-12 15 views
52

मैं अगर एक वर्ग एक Enum है पता करने के लिए कोशिश कर रहा हूँ है, लेकिन मुझे लगता है कि मैं कुछ याद कर रहा हूँ: यह मुझे उस कह त्रुटि देताअगर जाँच एक वर्ग java.lang.Enum

if (test.MyEnum.class instanceof Enum<?>.class) 
obj = resultWrapper.getEnum(i, test.MyEnum.class); 
else 
obj = resultWrapper.getObject(i); 

Enum क्लास वैध नहीं है। तो मैं कैसे जांच सकता हूं कि कक्षा एक एनम है या नहीं? मुझे यकीन है कि यह निर्धारित करना संभव है कि, मैं इसे प्राप्त करने में असमर्थ हूं।

if (obj.getClass().isEnum()) { 

... 
} 

Enum तो अपने कस्टम वर्ग है: -

धन्यवाद

उत्तर

89

सही सिंटैक्स होगा:

Enum.class.isAssignableFrom(test.MyEnum.class) 

लेकिन enums के लिए, यहाँ एक और अधिक सुविधाजनक तरीका है:

if (someObject.getClass().isEnum())) 

अद्यतन: एक शरीर के साथ enum आइटम (कि ओवरराइड उदाहरण के लिए तरीकों), यह वास्तव में काम नहीं करेगा। उस मामले में, का उपयोग

if (someObject instanceof Enum<?>) 

संदर्भ:

+1

'isEnum()'। यह गलत होता है यदि आपकी कक्षा एक अज्ञात वर्ग है जो किसी विधि को ओवरराइड करने वाले enum मानों में से एक द्वारा बनाई गई है। – Trejkaz

+0

@Trejkaz क्या आप उस पर विस्तार कर सकते हैं? मैं आपको –

+2

का पालन नहीं कर रहा हूं यदि आपके पास अपने enum में विधियां हैं, तो enum के व्यक्तिगत मान उन्हें ओवरराइड कर सकते हैं। यदि आप इनमें से किसी भी तरीके को ओवरराइड करते हैं तो यह एक अज्ञात वर्ग बनाता है जो enum का उप-वर्ग है। उस वर्ग के लिए isEnum() झूठी वापसी करता है। इस प्रकार, भले ही EnumClass.class.isEnum() सत्य लौटाता है, EnumClass.SOME_VALUE.getClass()। IsEnum() झूठी वापसी कर सकता है, इसलिए आपको सावधान रहना होगा कि आप कहां से कक्षा प्राप्त करते हैं। उदाहरण के लिए, यदि आप दूसरों के कॉल करने के लिए उपयोगिता विधि लिख रहे थे, तो isEnum() का उपयोग करना एक बुरा विचार होगा और Enum.class.isAssignableFrom (Clazz) का उपयोग करना सुरक्षित होगा। – Trejkaz

14

आप जावा 5 नई सुविधा के बारे में बात कर रहे हैं enum (यह वास्तव में बहुत ही नया नहीं है), तो यह जाने का रास्ता है , तो बस उस obj instanceof Enum की जांच करें।

+0

दुर्भाग्य से उस के लिए काम नहीं करता है:। TimeUnit.SECONDS.getClass() isEnum() खबरदार – aholub7x

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