एनम आणि त्याची सर्व वैशिष्ट्ये - १

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

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

"मी तुम्हाला एका अतिशय मनोरंजक गोष्टीबद्दल सांगणार आहे. ते अगदी सोपे आहे, परंतु ते आणखी मनोरंजक बनवते. त्याला एनम म्हणतात. एनम हा एक प्रकार आहे जो व्हेरिएबलमध्ये असू शकतील अशा विशिष्ट मूल्यांचा संच परिभाषित करतो. चला पाहूया. अगदी उदाहरणावर:"

enum वर्गाची व्याख्या
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
एनम वापरणे
Direction direction = Direction.LEFT;

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

"म्हणून आम्ही फक्त मूल्यांचा संच सूचीबद्ध करतो आणि तेच आहे?"

"होय, आम्ही एनम घोषित करतो आणि स्वल्पविरामाने विभक्त केलेली सर्व संभाव्य मूल्ये आत सूचीबद्ध करतो."

"हे वापरण्यास देखील खूप सोपे आहे."

"तुम्ही ते शून्य वर सेट करू शकता?"

"होय, एनम हा एक नियमित वर्ग आहे, किंवा त्याऐवजी तो वर्गासारखा आहे, इंटरफेस वर्गांप्रमाणेच आहे."

"मग मी जिथे वर्ग वापरू शकतो तिथे मी enum वापरू शकतो का?"

"हो."

"मी वर्गात एनम घोषित करू शकतो का?"

"हो."

"आणि एक enum वारस?"

"नाही, तुम्ही enum वारसा घेऊ शकत नाही आणि enum इतर वर्गांना वारसा देऊ शकत नाही."

"अस का?"

"कारण जावा कंपाइलर एनम्सला अंदाजे यात रूपांतरित करतो:

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) डायरेक्शन व्हेरिएबल्सना सध्याच्या कोणत्याही डायरेक्शन ऑब्जेक्ट्सचा संदर्भ दिला जाऊ शकतो. ते सर्व enum मध्ये सेट आहेत. या प्रकारच्या इतर कोणत्याही वस्तू नाहीत आणि भविष्यात इतर कोणतीही वस्तू असणार नाही.

6) दिशादर्शक वस्तूंची तुलना «==» वापरून केली जाऊ शकते, जी फक्त एक साधी संदर्भ तुलना करेल.

"हे अगदी स्पष्ट आहे असे मी म्हणणार नाही, परंतु तुमच्या उदाहरणानंतर ते अधिक स्पष्ट आहे."

"छान. मग तुमच्यासाठी अजून थोडी माहिती आहे:"

1) प्रत्येक दिशा ऑब्जेक्टची स्वतःची विशिष्ट संख्या असते. पहिला (UP) 0 आहे, दुसरा (DOWN) 1 आहे, तिसरा (LEFT) 2 आहे, इ. तुम्ही ordinal() पद्धत वापरून हा क्रमांक मिळवू शकता. "स्क्रीनकडे पहा:

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

2) प्रत्येक enum मध्ये एक मूल्य () पद्धत असते जी enum च्या मूल्यांची अॅरे मिळवते.

int leftIndex = Direction.LEFT.ordinal();

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

"याचा अर्थ आपण कोणत्याही enum घटकाची अनुक्रमणिका मिळवू शकतो, आणि नंतर तो अनुक्रमणिका वापरून पुन्हा घटक मिळवू शकतो."

"आम्ही फोरच लूपमध्ये एनम देखील वापरू शकतो :"

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

"याचा अर्थ enum toString पद्धत ओव्हरराइड करते का? शेवटी, ते असे काहीही प्रदर्शित करत नाही:"
«com.codegym.Direction@123fd4»?

"होय. शिवाय, प्रत्येक enum, आणि म्हणून दिशा, स्ट्रिंगमध्ये रूपांतरित केली जाऊ शकते आणि त्याउलट."

स्ट्रिंगमध्ये रूपांतरित करा:
String left = Direction.LEFT.toString(); // left == "LEFT";
स्ट्रिंगला एनममध्ये रूपांतरित करा:
Direction direction = Direction.valueOf("LEFT");

"अरे, समजले."

"तुम्ही दिशानिर्देशात नसलेल्या valueOf फंक्शनला स्ट्रिंग पास केल्यास काय होईल? उदाहरणार्थ, «AMIGO»?"

"तुला काय वाटत?"

"अपवाद?"

"हो. एक बेकायदेशीर युक्तिवाद अपवाद."

"ठीक आहे, हे एनम्सच्या जगाशी आपला परिचय गुंडाळते."