Enum మరియు దాని అన్ని లక్షణాలు - 1

"హాయ్, అమిగో!"

"హాయ్, అమిగో!"

"నేను మీకు చాలా ఆసక్తికరమైన విషయం గురించి చెప్పబోతున్నాను. ఇది చాలా సులభం, కానీ అది మరింత ఆసక్తికరంగా ఉంటుంది. దీనిని enum అంటారు. enum అనేది వేరియబుల్ కలిగి ఉండే నిర్దిష్ట విలువల సెట్‌ను నిర్వచించే రకం. చూద్దాం. ఒక ఉదాహరణలో వెంటనే:"

ఎన్యుమ్ క్లాస్ యొక్క నిర్వచనం
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
ఒక enum ఉపయోగించి
Direction direction = Direction.LEFT;

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

"కాబట్టి మేము విలువల సమితిని జాబితా చేస్తాము మరియు అంతేనా?"

"అవును, మేము ఒక 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) డైరెక్షన్ వేరియబుల్స్ ఇప్పటికే ఉన్న డైరెక్షన్ ఆబ్జెక్ట్‌లలో దేనికైనా సూచనను కేటాయించవచ్చు. అవన్నీ ఎనమ్‌లో సెట్ చేయబడ్డాయి. ఈ రకమైన ఇతర వస్తువులు ఏవీ లేవు మరియు భవిష్యత్తులో మరే ఇతర వస్తువులు ఉండవు.

6) డైరెక్షన్ ఆబ్జెక్ట్‌లను «==» ఉపయోగించి పోల్చవచ్చు, ఇది కేవలం సాధారణ సూచన పోలికను నిర్వహిస్తుంది."

"ఇది చాలా స్పష్టంగా ఉందని నేను చెప్పను, కానీ మీ ఉదాహరణ తర్వాత ఇది చాలా స్పష్టంగా ఉంది."

"అద్భుతం. మీ కోసం ఇక్కడ కొంచెం సమాచారం ఉంది:"

1) ప్రతి దిశ వస్తువు దాని స్వంత ప్రత్యేక సంఖ్యను కలిగి ఉంటుంది. మొదటిది (UP) 0, రెండవది (DOWN) 1, మూడవది (ఎడమవైపు) 2, మొదలైనవి. మీరు ఆర్డినల్() పద్ధతిని ఉపయోగించి ఈ సంఖ్యను పొందవచ్చు. "స్క్రీన్ వైపు చూడండి:

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»?

"అవును. అంతేకాకుండా, ప్రతి ఎన్యుమ్, అందువలన దిశను స్ట్రింగ్‌గా మార్చవచ్చు మరియు వైస్ వెర్సా."

స్ట్రింగ్‌గా మార్చండి:
String left = Direction.LEFT.toString(); // left == "LEFT";
స్ట్రింగ్‌ను ఎన్యూమ్‌గా మార్చండి:
Direction direction = Direction.valueOf("LEFT");

"అయ్యో అర్థమైంది."

"మీరు దిశలో లేని వాల్యూఆఫ్ ఫంక్షన్‌కి స్ట్రింగ్‌ను పాస్ చేస్తే ఏమి జరుగుతుంది? ఉదాహరణకు, «AMIGO»?"

"ఏమనుకుంటున్నారు?"

"మినహాయింపు?"

"అవును. ఒక చట్టవిరుద్ధమైన వాదన మినహాయింపు."

"సరే, అది ఎనమ్స్ ప్రపంచానికి మన పరిచయాన్ని ముగించింది."