JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ ڳڻپ (java enum)
articles
سطح

جاوا ۾ ڳڻپ (java enum)

گروپ ۾ شايع ٿيل
جڏهن پروگرامنگ، اسان اڪثر ڪري هڪ خاص ڊيٽا جي قسم لاء صحيح قدرن جي سيٽ کي محدود ڪرڻ جي ضرورت سان منهن ڪندا آهيون. تنهن ڪري، مثال طور، هفتي جي ڏينهن ۾ 7 مختلف قيمتون ٿي سگهن ٿيون، سال جي مهيني ۾ 12 ٿي سگهن ٿيون، ۽ موسم ۾ 4 ٿي سگهن ٿيون. اهڙن مسئلن کي حل ڪرڻ لاء، ڪيتريون ئي مستحڪم ٽائپ ڪيل پروگرامنگ ٻوليون مهيا ڪن ٿيون هڪ خاص ڊيٽا جو قسم - ڳڻپ ( enum). ڳڻپيوڪر جاوا ۾ فوري طور تي ظاهر نه ٿيو. enumورجن 1.5 سان شروع ٿيندڙ هڪ خاص ٻولي تعمير متعارف ڪرايو ويو. هن نقطي تائين، پروگرامر استعمال ڪيا آهن ٻيا طريقا ڳڻپ کي لاڳو ڪرڻ لاء. جاوا ۾ شمار (java enum) - 1

enum تعمير

اچو ته هڪ مثال سان شروع ڪريون. اچو ته بيان ڪريون enumڊيٽا جي قسم کي استعمال ڪندي موسم کي محفوظ ڪرڻ لاءِ:
enum Season { WINTER, SPRING, SUMMER, AUTUMN }
خير، ان جي استعمال جو هڪ سادي مثال:
Season season = Season.SPRING;
if (season == Season.SPRING) season = Season.SUMMER;
System.out.println(season);
جنهن جي نتيجي ۾ SUMMER کنسول تي پرنٽ ڪيو ويندو . مان سمجهان ٿو ته مثال واضح آهي ۽ وضاحت جي ضرورت ناهي.

Enum هڪ طبقو آهي

اعلان ڪندي enum، اسان واضح طور تي هڪ ڪلاس ٺاهي رهيا آهيون جنهن مان نڪتل آهي java.lang.Enum. روايتي طور تي، تعمير enum Season { ... }جي برابر آهي class Season extends java.lang.Enum { ... }. ۽ جيتوڻيڪ مرتب ڪندڙ اسان کي واضح طور تي اسان کان وراثت ۾ وڃڻ جي اجازت نٿو ڏئي java.lang.Enum، اهو اڃا تائين تصديق ڪرڻ آسان آهي ته enumاهو استعمال ڪندي وراثت آهي reflection:
System.out.println(Season.class.getSuperclass());
هيٺ ڏنل ڪنسول تي ڏيکاري ويندي:
class java.lang.Enum
اصل وراثت خود بخود اسان جي لاءِ جاوا ڪمپلر جي ذريعي ڪئي وئي آهي. اڳيون، اچو ته اتفاق ڪريون ته ڳڻپيوڪر پاران ٺاهيل ڪلاس کي سڏڻ لاءِ ڳڻپ لاڳو ڪرڻ لاءِ -class enum، ۽ ڳڻپيوڪر قسم جي ممڪن قدرن کي enum-a عنصرن جي طور تي.

Enum ميمبر enumهڪ ڪلاس جا مثال آهن جيڪي مستحڪم طور تي پهچ وارا آهن

عناصر enum Season (WINTER, SPRING и т.д.)جامد طور تي رسائي جا مثال آهن enum-ڪلاس جا Season. انهن جي جامد دستيابي اسان کي اجازت ڏئي ٿي موازنہ انجام ڏيڻ جي حوالي سان استعمال ڪندي آپريٽر ==. مثال:
Season season = Season.SUMMER;
if (season == Season.AUTUMN) season = Season.WINTER;

enum عنصر جو نالو ۽ سيريل نمبر

جيئن اڳ ذڪر ڪيو ويو آهي، ڪنهن به enum-ڪلاس وارثن java.lang.Enum، جنهن ۾ سڀني ڳڻپ لاء مفيد طريقا شامل آهن. مثال:
Season season = Season.WINTER;
System.out.println("season.name()=" + season.name() + " season.toString()=" + season.toString() + " season.ordinal()=" + season.ordinal());
پيداوار ٿي ويندي:
season.name()=WINTER season.toString()=WINTER season.ordinal()=0
طريقا name()، toString()۽ هتي ڏيکاريا ويا آهن ordinal(). طريقن جي معني واضح آهي. اهو ياد رکڻ گهرجي ته اهي طريقا enumڪلاس کان ورثي ۾ مليا آهن java.lang.Enum. هڪ عنصر حاصل ڪرڻ enumان جي نالي جي اسٽرنگ نمائندگي سان گهڻو ڪري اهو ڪم پيدا ٿئي ٿو ته عنصر حاصل ڪرڻ enumان جي اسٽرنگ نمائندگي سان. انهن مقصدن لاءِ، هر enumڪلاس ۾، مرتب ڪندڙ پاڻمرادو هڪ خاص جامد طريقو ٺاهي ٿو: public static EnumClass valueOf(String name), جيڪو هڪ ڳڻپيوڪر عنصر کي EnumClassهڪ نالي سان واپس ڪري ٿو name. استعمال مثال:
String name = "WINTER";
Season season = Season.valueOf(name);
ڪوڊ تي عمل ڪرڻ جي نتيجي ۾، موسم متغير برابر ٿيندو Season.WINTER. مهرباني ڪري نوٽ ڪريو ته جيڪڏهن عنصر نه مليو، هڪ غيرقانونيArgumentException اڇلايو ويندو ، ۽ جيڪڏهن اهو nameبرابر آهي null، هڪ NullPointerException اڇلايو ويندو . رستي ۾، اهو اڪثر وساريو ويندو آهي. ڪن سببن جي ڪري، گھڻا پڪا پختا قائل آھن ته جيڪڏھن ڪو فنڪشن ھڪڙو دليل وٺي ٿو ۽ ڪن حالتن ۾ ھڪ IllegalArgumentException اڇلي ٿو ، پوءِ جڏھن ان کي اتي پاس ڪري ٿو ، ته ھڪ IllegalArgumentExceptionnull ضرور اڇلايو ويندو . پر اهو نقطي جي ڀرسان آهي. اچو ته جاري رکون. ڳڻپ جا سڀئي عنصر حاصل ڪرڻ ڪڏهن ڪڏهن توهان کي رن ٽائيم تي هڪ -ڪلاس جي سڀني عنصرن جي لسٽ حاصل ڪرڻ جي ضرورت پوندي . انهن مقصدن لاء، مرتب ڪندڙ هر هڪ طبقي ۾ هڪ طريقو ٺاهي ٿو . استعمال مثال: enumenumpublic static EnumClass[] values()
System.out.println(Arrays.toString(Season.values()));
اسان هيٺ ڏنل پيداوار حاصل ڪندا آهيون:
[WINTER, SPRING, SUMMER, AUTUMN]
نوٽ ڪريو ته ڪلاس ۾ نه ئي طريقو valueOf()۽ نه ئي طريقو بيان ڪيل آهي . ان جي بدران، اهي خودڪار طريقي سان شامل ڪيا ويا آهن مرتب ڪندڙ طرفان جڏهن -ڪلاس مرتب ڪيو ويو آهي. -ڪلاس ۾ پنهنجا طريقا شامل ڪرڻ توهان کي موقعو آهي ته توهان پنهنجا پنهنجا طريقا شامل ڪريو -ڪلاس ۽ ان جي عنصرن ۾: ساڳيو، پر پوليمورفيزم سان: آخري مثال وراثت جي استعمال کي ظاهر ڪري ٿو . انهي تي وڌيڪ بعد ۾. جاوا ۾ وراثت توهان کي اجازت ڏئي ٿي ته هڪ طبقاتي ورهاڱي کي لاڳو ڪرڻ، جن مان شيون هڪ واحد مثال ۾ ٺاهيا ويا آهن ۽ جامد طور تي رسائي لائق آهن. انهي حالت ۾، عناصر انهن جي پنهنجي تعمير ڪندڙ تي مشتمل هوندا. اچو ته هڪ مثال ڏيو: هتي اسان ٽن عنصرن سان هڪ ڳڻپ جو اعلان ڪريون ٿا ، ۽ . مرتب ڪندڙ ھيٺيون ڪلاس ۽ شيون ٺاھيندو: values()java.lang.Enumenumenumenumجاوا ۾ شمار (java enum) - 2جاوا ۾ شمار (java enum) - 3enumenumenumenumجاوا ۾ شمار (java enum) - 4TypeINTINTEGERSTRING
  • Type- ڪلاس مان نڪتلjava.lang.Enum
  • INT- 1st ڪلاس جو اعتراض جنهن مان نڪتلType
  • INTEGER- مان نڪتل 2nd ڪلاس جو اعتراضType
  • STRING- 3rd درجي جو اعتراض مان نڪتلType
Object parse(String)پوليمورفڪ طريقي ۽ تعمير ڪندڙ سان ٽي نڪتل طبقا ٺاهيا ويندا Type(..., boolean). ساڳئي وقت، طبقن جون شيون INT، INTEGER۽ STRINGهڪ واحد ڪاپي ۾ موجود آهن ۽ جامد طور تي رسائي لائق آهن. توھان ھن جي تصديق ڪري سگھو ٿا:
System.out.println(Type.class);
System.out.println(Type.INT.getClass() + " " + Type.INT.getClass().getSuperclass());
System.out.println(Type.INTEGER.getClass() + " " + Type.INTEGER.getClass().getSuperclass());
System.out.println(Type.STRING.getClass()  + " " + Type.STRING.getClass().getSuperclass());
اسان هيٺ ڏنل پيداوار حاصل ڪندا آهيون:
class Type
class Type$1 class Type
class Type$2 class Type
class Type$3 class Type
اهو ڏسي سگهجي ٿو ته مرتب ڪندڙ هڪ ڪلاس ٺاهي ٿو Type۽ 3 nestedطبقن مان نڪتل آهن Type.

وراثت سان گڏ اينيم ڪلاس کي ختم ڪيو ويو

Typeمٿين جي تصديق ڪرڻ لاءِ، اسان مٿي ڏنل مثال مان ڳڻپ کي ختم ڪرڻ جو نتيجو پڻ پيش ڪريون ٿا :جاوا ۾ شمار (java enum) - 5

ڳڻپيوڪر ۽ پيرا ميٽرڪ پوليمورفيزم

پڙهندڙ حيران ٿي سگهي ٿو: " مٿين قسم جي ڳڻپ ۾ عام استعمال ڇو نه آهي؟ " حقيقت اها آهي ته جاوا ۾ generics جو استعمال enumممنوع آهي. تنهن ڪري هيٺ ڏنل مثال مرتب نه ٿيندو:
enum Type<T> {}

وڌيڪ تعليم

جاوا ۾ ڳڻپيوڪر ڪيئن ڪم ڪري ٿو، ان جي وڌيڪ ڄاڻ لاءِ، مان صلاح ڏيان ٿو ته توهان پاڻ کي ڪلاس جي سورس ڪوڊ سان واقف ڪريو java.lang.Enum، ۽ پڻ استعمال ڪريو Jad decompiler ٺاهيل ڪوڊ جو مطالعو ڪرڻ لاءِ. ان کان علاوه، جاوا لائبريري جي سورس ڪوڊ جو مطالعو ڪرڻ بلڪل ضروري آهي انهي کي سمجهڻ لاءِ ته جاوا ۾ ڪيترا ميکانيزم ڪم ڪن ٿا ۽ ڪارائتو آهي آبجیکٹ آرينٽيڊ ڊيزائن جي حوالي سان. اصل ماخذ سان لنڪ: http://alexander.lds.lg.ua/
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION