1. पृष्ठभूमि कैसे enumबनी
आज हम जावा में एक अन्य प्रकार के डेटा प्रकार का पता लगाएंगे: enum. नाम enumशब्द गणना से आया है । यह डेटा प्रकार क्या है और इसके लिए क्या है?
कभी-कभी एक प्रोग्रामर को एक नया डेटा प्रकार बनाने की आवश्यकता होती है, जिसके संभावित मान एक छोटी निश्चित सूची तक सीमित होते हैं।
उदाहरण के लिए, एक DayOfTheWeekप्रकार केवल मान ले सकता है MONDAY, TUESDAY, WEDNESDAY, ... कुल 7 मान हैं। या एक Monthप्रकार केवल मान ही ले सकता है JANUARY, FEBRUARY, MARCH, ... कुल 12 मान हैं।
बेशक, आप संख्याओं ( intप्रकार) का उपयोग कर सकते हैं: 1- सोमवार, 2- मंगलवार, आदि। लेकिन कोई गलती से अमान्य मान जैसे 8या 0आपके चर को निर्दिष्ट कर सकता है।
आपके पास आसानी से ऐसी स्थिति हो सकती है जहां एक प्रोग्रामर सोचता है कि सप्ताह के दिन (या वर्ष के महीने) शून्य से शुरू होते हैं, जबकि अन्य उम्मीद करते हैं कि उनकी संख्या एक से शुरू हो, आदि।
यही कारण है कि जावा ने पेश किया enum, एक डेटा प्रकार जिसमें मूल्यों का एक सीमित सेट होता है ।
2. एक प्रकार की घोषणा करना
एक नया enumडेटा प्रकार घोषित करना इस तरह दिखता है:
enum TypeName
{
VALUE1,
VALUE2,
VALUE3
}
नए प्रकार (वर्ग) का नाम कहां TypeNameहै, और संभावित मान अल्पविराम से अलग होते हैं और घुंघराले ब्रेसिज़ में लपेटे जाते हैं: Value1, Value2, Value3।
एक उदाहरण के रूप में, आइए अपना स्वयं का बनाएँ DayOfTheWeek enum:
| कोड | टिप्पणी |
|---|---|
|
नया Dayप्रकार सोमवार मंगलवार बुधवार गुरुवार शुक्रवार शनिवार रविवार |
यहां बताया गया है कि आप हमारे नए प्रकार के वेरिएबल को मान कैसे प्रदान करते हैं:
Day day = Day.MONDAY;
उदाहरण:
| कोड | टिप्पणी |
|---|---|
|
स्क्रीन आउटपुट होगा: |
3. एक के तरीकेenum
एक enumप्रकार में कई अंतर्निहित विधियाँ होती हैं, जिनमें से दो बहुत ही रोचक हैं:
स्थैतिक values()विधि प्रकार के सभी मानों की एक सरणी लौटाती है enum:
| कोड | टिप्पणी |
|---|---|
|
चर daysएक सरणी को संग्रहीत करता है जिसमें प्रकार के मान होते हैं Day(7 तत्व) स्क्रीन पर सरणी की सामग्री प्रदर्शित करें: |
विधि ordinal()स्थिरांक की क्रमिक संख्या लौटाती है। आप इसे कक्षा enumके बजाए मूल्य पर कहते हैं enum:
| कोड | कंसोल आउटपुट |
|---|---|
|
|
4. एक वर्ग में परिवर्तित करना
वास्तव में, यहाँ कुछ भी जादुई नहीं है। कंपाइलर ने हमें कुछ सिंटैक्टिक चीनी दी है। संकलन समय पर, Dayएनम को एक साधारण वर्ग में बदल दिया जाता है:
| कोड, सरलीकृत संस्करण | टिप्पणी |
|---|---|
|
Dayस्थिर स्थिरांक की सूची एनुम के सभी मूल्यों के साथ एक सरणी एक चर जो एक विशिष्ट वस्तु के मूल्य को संग्रहीत करता है वर्ग निजी है, जिसका अर्थ है कि वर्ग की वस्तुओं को केवल कक्षा के अंदर ही बनाया जा सकता है । किसी वस्तु पर विधि को बुलाया जाना चाहिए । यह वस्तु का मान - फ़ील्ड लौटाता है। विधि वर्ग के सभी मूल्यों के साथ एक स्थिर सरणी लौटाती है DayDayDayconstructorDayDayordinalDayvalueDay |
यदि हम कक्षा से सभी स्थिर विधियों और चरों को हटा देते हैं Day, तो हमें निम्नलिखित मिलते हैं:
| कोड | टिप्पणी |
|---|---|
|
वेरिएबल स्टोर ऑब्जेक्ट valueके मान को केवल क्लास के अंदर ही बनाया जा सकता है , क्योंकि कंस्ट्रक्टर है । विधि वस्तु का रिटर्न करती है । DayDayDayprivateordinal()valueDay |
दूसरे शब्दों में, यहाँ कुछ भी डरावना नहीं हो रहा है। कंपाइलर Dayवर्ग बनाता है, स्थिरांक जोड़ता है जो enumमूल्यों का प्रतिनिधित्व करता है, आवश्यक विधियों को जोड़ता है, और वर्ग निर्माता बनाता है private। हम देखेंगे कि थोड़ी देर बाद कंस्ट्रक्टर कैसे काम करते हैं।
उम्मीद है, अब यह स्पष्ट हो गया है कि हम इस तरह एक चर के लिए मान क्यों निर्दिष्ट करते हैं:
Day day = Day.MONDAY;
MONDAYDayकक्षा में सिर्फ एक स्थिर क्षेत्र (स्थिर) है । क्लास के बाहर से स्टैटिक मेथड्स और फील्ड्स को एक्सेस करते समय, आपको फील्ड या मेथड के नाम से पहले क्लास का नाम बताना होगा।
5. एक के अधिक तरीकेenum
हर enumवर्ग में कई दिलचस्प विशेषताएं हैं।
एक स्ट्रिंग में और से कनवर्ट करना
एनम ऑब्जेक्ट को स्ट्रिंग में बदलने के लिए, आपको इसकी toString()विधि को कॉल करने की आवश्यकता है।
String str = Day.MONDAY.toString();
दूसरी दिशा में परिवर्तित करने के लिए (एक स्ट्रिंग से किसी Dayऑब्जेक्ट में), आप स्थिर valueOf()विधि का उपयोग कर सकते हैं:
Day day = Day.valueOf("MONDAY");
यह बेहद सुविधाजनक है और कई मामलों में मददगार होगा।
एक संख्या में परिवर्तित करना और फिर से वापस आना
enumआप पहले से ही जानते हैं कि किसी वस्तु को संख्या में कैसे बदलना है : ordinal()विधि को कॉल करें:
int index = Day.MONDAY.ordinal();
दूसरी दिशा में बदलने के लिए (किसी संख्या से किसी Dayवस्तु में), आपको अधिक पारदर्शी निर्माण की आवश्यकता है:
Day day = Day.values()[2];
उदाहरण:
| कोड | टिप्पणी |
|---|---|
|
सोमवार सोमवार का सूचकांक प्राप्त करें: सप्ताह का 0 दिन सोमवार के 2 दिन बाद |
महत्वपूर्ण बिंदु: क्योंकि enumमान स्थिरांक का एक निश्चित सेट है, उनकी तुलना == का उपयोग करके की जा सकती है । MONDAYदूसरे शब्दों में, आपके पास अलग-अलग पते वाली दो समान वस्तुएं नहीं हो सकती हैं । प्रत्येक एनम मान का केवल एक उदाहरण मौजूद है। और इसका मतलब है कि == का उपयोग करके एनम चर की तुलना करना हमेशा काम करेगा।
6. अपने स्वयं के तरीकों को एक में जोड़नाenum
क्योंकि enumसंकलन समय पर एक साधारण वर्ग में बदल जाता है, आप इसमें विधियों की घोषणा कर सकते हैं। इन विधियों को केवल उस वर्ग में जोड़ा जाता है जो संकलक उत्पन्न करता है। उदाहरण के लिए, मान लीजिए कि हम चाहते हैं Day enumकि हमारा ऐरे के बजाय एनम वैल्यू की एक सूची लौटाए।
फिर हम निम्नलिखित कोड जोड़ सकते हैं:
| कोड | टिप्पणी |
|---|---|
|
मूल्यों की सूची के बाद एक अर्धविराम आवश्यक है। एक वस्तु बनाएँ विधि द्वारा लौटाए गए सरणी में मान जोड़ें । सूची को लौटें। ArrayListvalues() |
अब इस विधि को कोड में कहा जा सकता है:
| कोड | टिप्पणी |
|---|---|
|
चर listके सभी मानों की एक सूची संग्रहीत करेगा Day enum। |
GO TO FULL VERSION