प्रारंभिक लेख मुझे ठीक दिखता है। फिर भी, टिप्पणियों के आधार पर, ऐसा लगता है कि जावा एनम्स से संबंधित कुछ टिप्पणियां कुछ चीजों को स्पष्ट कर सकती हैं।
जावा में एनम प्रकार परिभाषा के अनुसार एक वर्ग है, लेकिन कई प्रोग्रामर इसे भूल जाते हैं, क्योंकि वे इसे अन्य भाषाओं में "अनुमत मानों की एक सूची" से संबंधित करते हैं। यह उससे भी अधिक है।
तो, उन स्विच स्टेटमेंट से बचने के लिए एनम क्लास में कुछ कोड और अतिरिक्त विधियां डालना उचित हो सकता है। लगभग एक अलग "enum- जैसी असली कक्षा" बनाने की आवश्यकता नहीं है।
दस्तावेज़ीकरण के बिंदु पर भी विचार करें - क्या आप डेटाबेस में अपने enum के वास्तविक अर्थ को दस्तावेज करना चाहते हैं? स्रोत कोड (आपके enum प्रकार) या कुछ बाहरी दस्तावेज में प्रतिबिंबित स्रोत कोड में? मैं व्यक्तिगत रूप से स्रोत कोड पसंद करता हूं।
यदि आप गति या किसी भी कारण से डेटाबेस में पूर्णांक के रूप में enum मान प्रस्तुत करना चाहते हैं, तो मैपिंग जावा एनम में भी रहना चाहिए। आपको डिफ़ॉल्ट रूप से स्ट्रिंग-नाम मैपिंग मिल जाएगी, और मैं इसके साथ संतुष्ट हूं। प्रत्येक enum मान से जुड़े एक क्रमिक संख्या है, लेकिन कोड और डेटाबेस के बीच मैपिंग के रूप में सीधे इसका उपयोग करना बहुत उज्ज्वल नहीं है, क्योंकि अगर कोई स्रोत कोड में मानों को संदर्भित करता है तो उस क्रमिक संख्या में परिवर्तन होगा। या मौजूदा मूल्यों के बीच अतिरिक्त enum मान जोड़ता है। या कुछ मूल्य हटा देता है।
(बेशक, अगर कोई स्रोत कोड में enum का नाम बदलता है, तो डिफ़ॉल्ट स्ट्रिंग-मैपिंग भी खट्टा हो जाता है, लेकिन यह गलती से होने की संभावना कम है। और अगर आप इसे जरूरी रखते हैं तो आप आसानी से इसके खिलाफ सुरक्षा कर सकते हैं डेटाबेस में कुछ रनटाइम-चेकिंग और चेक बाधाएं पहले ही सुझाई गई हैं।)
सैद्धांतिक रूप से सहमत हैं, हालांकि कम से कम जावा में "enum" सीमित है जिसमें यह एक सुपरक्लास (ऊपर उल्लिखित) नहीं हो सकता है, इसलिए कभी-कभी "टाइपएफ़ एनम" कक्षा शायद बेहतर होती है। – sleske