Enum और इसकी सभी विशेषताएं - 1

"हाय, अमीगो!"

"हाय, अमीगो!"

"मैं आपको कुछ बहुत दिलचस्प के बारे में बताने जा रहा हूँ। यह बहुत आसान है, लेकिन यह इसे और भी दिलचस्प बनाता है। इसे एक एनम कहा जाता है। एक एनम एक प्रकार है जो एक वेरिएबल के मानों के विशिष्ट सेट को परिभाषित करता है। आइए देखें एक उदाहरण पर सही बंद:"

एक एनम वर्ग की परिभाषा
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
एक एनम का उपयोग करना
Direction direction = Direction.LEFT;

if (direction == Direction.LEFT)
 direction = Direction.RIGHT;
else
 direction = Direction.DOWN;

"तो हम सिर्फ मूल्यों का एक सेट सूचीबद्ध करते हैं और यह बात है?"

"हां, हम एक एनम घोषित करते हैं और इसके सभी संभावित मूल्यों को अल्पविराम से अलग करके सूचीबद्ध करते हैं।"

"इसका उपयोग करना भी काफी आसान है।"

"क्या आप इसे शून्य पर सेट कर सकते हैं?"

"हाँ, एक एनम एक नियमित वर्ग है, या बल्कि यह एक वर्ग की तरह है, जैसा कि इंटरफेस कक्षाओं की तरह हैं।"

"तो जहाँ भी मैं कक्षाओं का उपयोग कर सकता हूँ, क्या मैं एनम का उपयोग कर सकता हूँ?"

"हाँ।"

"क्या मैं कक्षा के अंदर एक एनम घोषित कर सकता हूं?"

"हाँ।"

"और एक एनम विरासत में मिला?"

"नहीं, आप एक एनम इनहेरिट नहीं कर सकते हैं और एक एनम अन्य वर्गों को इनहेरिट नहीं कर सकता है।"

"ऐसा क्यों?"

"क्योंकि जावा कंपाइलर एनम को लगभग इस प्रकार परिवर्तित करता है:

public final class Direction extends Enum
{
 public static final Direction UP = new Direction();
 public static final Direction DOWN = new Direction();
 public static final Direction LEFT = new Direction();
 public static final Direction RIGHT = new Direction();

 private Direction() {} // Private constructor
}

"जैसा कि आप इस उदाहरण से देख सकते हैं:"

1) डायरेक्शन क्लास पूरी तरह से एनम क्लास इनहेरिट करती है, इसलिए यह किसी और चीज को इनहेरिट नहीं कर सकती है।

2) दिशा वर्ग को अंतिम घोषित किया गया है, इसलिए इसे और कुछ नहीं प्राप्त कर सकता है।

3) दिशा वर्ग के चर वास्तव में सार्वजनिक स्थिर अंतिम दिशा चर हैं। यह कोड में स्पष्ट है जो उनका उपयोग करता है:

दिशा दिशा = दिशा । बाएँ ;

4) डायरेक्शन क्लास में केवल एक कंस्ट्रक्टर होता है और यह प्राइवेट होता है। इसका मतलब है कि डायरेक्शन ऑब्जेक्ट केवल क्लास के अंदर कोड का उपयोग करके बनाया जा सकता है। घोषित वस्तुओं के अलावा, कोई वस्तु नहीं बनाई जा सकती।

5) दिशा चर को मौजूदा दिशा वस्तुओं में से किसी के संदर्भ में निर्दिष्ट किया जा सकता है। वे सभी एनम के भीतर सेट हैं। इस प्रकार की कोई अन्य वस्तु नहीं है, और भविष्य में कोई अन्य वस्तु नहीं होगी।

6) दिशा वस्तुओं की तुलना «==» का उपयोग करके की जा सकती है, जो केवल एक साधारण संदर्भ तुलना करेगी।"

"मैं यह नहीं कहूंगा कि यह बहुत स्पष्ट है, लेकिन आपके उदाहरण के बाद यह बहुत स्पष्ट है।"

"बहुत बढ़िया। फिर यहां आपके लिए थोड़ी और जानकारी दी गई है:"

1) प्रत्येक दिशा वस्तु की अपनी अनूठी संख्या होती है। पहला (UP) 0 है, दूसरा (DOWN) 1 है, तीसरा (LEFT) 2 है, आदि। आप यह संख्या क्रमसूचक () विधि का उपयोग करके प्राप्त कर सकते हैं। "आवरण पर देखें:

Direction direction = Direction.LEFT;
int index = direction.ordinal();
int index2 = Direction.RIGHT.ordinal();

2) प्रत्येक एनम में एक मान () विधि होती है जो एनम के मानों की एक सरणी लौटाती है।

int leftIndex = Direction.LEFT.ordinal();

Direction[] array = Direction.values();
Direction left = array[leftIndex];

"इसका मतलब है कि हम किसी भी एनम तत्व का सूचकांक प्राप्त कर सकते हैं, और फिर उस सूचकांक का उपयोग करके फिर से तत्व प्राप्त कर सकते हैं।"

"हम फ़ोरैच लूप में एक एनम का भी उपयोग कर सकते हैं:"

for (Direction direction : Direction.values())
{
 System.out.println(direction);
}
स्क्रीन आउटपुट:
UP
DOWN
LEFT
RIGHT

"क्या इसका मतलब यह है कि एनम टूस्ट्रिंग विधि को ओवरराइड करता है? आखिरकार, यह कुछ भी प्रदर्शित नहीं करता है:"
«com.codegym.Direction@123fd4»?

"हाँ। इसके अलावा, प्रत्येक गणना, और इसलिए दिशा, को एक स्ट्रिंग में परिवर्तित किया जा सकता है और इसके विपरीत।"

एक स्ट्रिंग में कनवर्ट करें:
String left = Direction.LEFT.toString(); // left == "LEFT";
एक स्ट्रिंग को एनम में बदलें:
Direction direction = Direction.valueOf("LEFT");

"अच्छा अब समझा।"

"क्या होता है यदि आप एक स्ट्रिंग को valueOf फ़ंक्शन में पास करते हैं जो दिशा में नहीं है? उदाहरण के लिए, «AMIGO»?"

"आप क्या सोचते हैं?"

"एक अपवाद?"

"हाँ। एक अवैध तर्क अपवाद।"

"ठीक है, यह हमारे परिचय को एनम की दुनिया में लपेटता है।"