JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ اينم: ڪلاس ڪيئن استعمال ڪجي

جاوا ۾ اينم: ڪلاس ڪيئن استعمال ڪجي

گروپ ۾ شايع ٿيل
سلام! هن آرٽيڪل ۾ آئون توهان کي جاوا اينمس بابت ٻڌائيندس. تصور ڪريو ته توھان کي ھڪڙو ڪم ڏنو ويو آھي: ھڪڙو ڪلاس ٺاھيو جيڪو ھفتي جي ڏينھن کي لاڳو ڪري . پهرين نظر ۾، هن بابت ڪا به پيچيدگي ناهي، ۽ توهان جو ڪوڊ ڪجهه هن طرح نظر ايندو:
public class DayOfWeek {

   private String title;

   public DayOfWeek(String title) {
       this.title = title;
   }

   public static void main(String[] args) {
       DayOfWeek dayOfWeek = new DayOfWeek("Saturday");
       System.out.println(dayOfWeek);
   }

   @Override
   public String toString() {
       return "DayOfWeek{" +
               "title='" + title + '\'' +
               '}';
   }
}
۽ سڀ ڪجھ ٺيڪ لڳي ٿو، پر ھڪڙو مسئلو آھي: توھان ڪنھن به متن کي DayOfWeek ڪلاس جي ٺاھيندڙ ڏانھن منتقل ڪري سگھو ٿا. هن طريقي سان، ڪو ماڻهو هفتي جو ڏينهن ٺاهي سگهي ٿو "Frog"، "Cloud" يا "azaza322". اهو واضح طور تي اهو رويو ناهي جنهن جي اسان توقع ڪندا آهيون، ڇاڪاڻ ته هفتي جا صرف 7 حقيقي ڏينهن آهن، ۽ انهن مان هر هڪ جو نالو آهي. تنهن ڪري، اسان جو ڪم ڪنهن حد تائين ممڪن قدرن جي حد کي محدود ڪرڻ آهي “ هفتي جو ڏينهن ” ڪلاس. جاوا 1.5 کان اڳ، ڊولپرز کي مجبور ڪيو ويو ته هن مسئلي جو حل پاڻ سان گڏ، ڇو ته ٻولي ۾ ڪو به تيار ڪيل حل نه هو. انهن ڏينهن ۾، جيڪڏهن صورتحال کي محدود تعداد جي قيمت جي ضرورت هئي، انهن هن ڪيو:
public class DayOfWeek {

   private String title;

   private DayOfWeek(String title) {
       this.title = title;
   }

   public static DayOfWeek SUNDAY = new DayOfWeek("Sunday");
   public static DayOfWeek MONDAY = new DayOfWeek("Monday");
   public static DayOfWeek TUESDAY = new DayOfWeek("Tuesday");
   public static DayOfWeek WEDNESDAY = new DayOfWeek("Wednesday");
   public static DayOfWeek THURSDAY = new DayOfWeek("Thursday");
   public static DayOfWeek FRIDAY = new DayOfWeek("Friday");
   public static DayOfWeek SATURDAY = new DayOfWeek("Saturday");

   @Override
   public String toString() {
       return "DayOfWeek{" +
               "title='" + title + '\'' +
               '}';
   }
}
هتي توهان کي ڇا ڌيان ڏيڻ گهرجي:
  • ذاتي تعمير ڪندڙ. جيڪڏهن هڪ تعمير ڪندڙ پرائيويٽ موڊيفائر سان نشان لڳايو ويو آهي ، ڪلاس جو هڪ اعتراض انهي تعمير ڪندڙ کي استعمال ڪندي ٺاهي نٿو سگهجي. ۽ جيئن ته هن طبقي ۾ صرف هڪ تعمير ڪندڙ آهي، DayOfWeek اعتراض هرگز ٺاهي نٿو سگهجي.

    public class Main {
    
       		public static void main(String[] args) {
    
           			DayOfWeek sunday = new DayOfWeek();//error!
       		}
    }
  • ساڳئي وقت، ڪلاس ۾ عوامي جامد شين جو گهربل تعداد شامل آهي جيڪي اسان جي گهربل طريقي سان شروع ڪيا ويا آهن (ڏينهن جا نالا صحيح آهن).

    اهو ان کي ٻين طبقن ۾ شيون استعمال ڪرڻ ممڪن بڻائي.

    public class Man {
    
       		public static void main(String[] args) {
    
           			DayOfWeek sunday = DayOfWeek.SUNDAY;
    
           			System.out.println(sunday);
      		 }
    }

    نتيجو:

    هفتي جو ڏينهن{عنوان='آچر'}

اهو طريقو گهڻو ڪري اسان کي مسئلو حل ڪرڻ جي اجازت ڏني. اسان وٽ هفتي جا 7 ڏينهن هئا، ۽ ڪو به نئون ٺاهي نه سگهيو. اهو حل پيش ڪيو ويو جوشوا بلوچ ڪتاب Effective Java ۾ . ڪتاب، رستي ۾، تمام ٿڌو آهي ۽ ڪنهن به جاوا ڊولپر لاءِ پڙهڻ لازمي آهي.
اينم ڪلاس ڪيئن استعمال ڪجي - 2
جاوا 1.5 جي رليز سان، ٻولي اهڙين حالتن لاءِ تيار ڪيل حل متعارف ڪرايو - Enum ڳڻپ . Enum پڻ هڪ ڪلاس آهي. پر اهو خاص طور تي اسان جي مسئلن کي حل ڪرڻ لاءِ ”مطابق“ آهي: قدرن جي هڪ خاص محدود حد کي ٺاهڻ. جيئن ته جاوا جي ٺاهيندڙن وٽ اڳ ۾ ئي تيار ڪيل مثال هئا (چئو، سي ٻولي، جنهن ۾ اينم اڳ ۾ ئي موجود آهي)، اهي بهترين اختيار ٺاهي سگھندا هئا.

اينيم ڇا آهي؟

سو، جاوا ۾ Enum ڇا آهي ؟ اچو ته ساڳئي DayOfWeek جو مثال ڏسو :
public enum DayOfWeek {

   SUNDAY,
   MONDAY,
   TUESDAY,
   WEDNESDAY,
   THURSDAY,
   FRIDAY,
   SATURDAY
}
اهو اڳ ۾ ئي تمام سادو ڏسڻ ۾ اچي ٿو :) اسان جي Enum اندر جامد رسائي سان 7 مستقل آهن. اسان اڳ ۾ ئي پروگرام ۾ منطق کي لاڳو ڪرڻ لاء استعمال ڪري سگهون ٿا. مثال طور، اچو ته هڪ پروگرام لکون جيڪو اهو طئي ڪندو ته ڇا هڪ شاگرد کي اڄ اسڪول وڃڻ جي ضرورت آهي. اسان جي شاگرد جو پنهنجو روزانو معمول هوندو، جيڪو ScholarSchedule ڪلاس پاران ترتيب ڏنو ويو آهي :
public class ScholarSchedule {

   private DayOfWeek dayOfWeek;
   //...other fields


   public DayOfWeek getDayOfWeek() {
       return dayOfWeek;
   }

   public void setDayOfWeek(DayOfWeek dayOfWeek) {
       this.dayOfWeek = dayOfWeek;
   }
}
DayOfWeek ڏينهن جي موڊ ۾ متغير اهو طئي ڪري ٿو ته اهو ڪهڙو ڏينهن آهي. ۽ هتي اسان جي شاگرد جو ڪلاس آهي:
public class Scholar {

   private ScholarSchedule schedule;
   private boolean goToSchool;

   public void wakeUp() {

       if (this.schedule.getDayOfWeek() == DayOfWeek.SUNDAY) {
           System.out.println("Hooray, you can sleep some more!");
       } else {
           System.out.println("Damn, back to school :(");
       }
   }
}
wakeUp() طريقي ۾ ، Enum استعمال ڪندي، اسان شاگرد جي وڌيڪ عملن جو تعين ڪريون ٿا. اسان اهو به تفصيل سان بيان نه ڪيو آهي ته DayOfWeek ۾ هر متغير جو مطلب ڇا آهي، ۽ اهو ضروري ناهي: هفتي جي ڏينهن جو ميکانيزم اڳ ۾ ئي واضح آهي، ۽ جيڪڏهن اسان ان کي موجوده شڪل ۾ استعمال ڪندا آهيون، ڪو به ڊولپر سمجهي سگهندو ته ڇا توهان جي ڪوڊ ۾ ٿي رهيو آهي. Enum جي سهولت جو هڪ ٻيو مثال اهو آهي ته ان جي مستقل کي سوئچ بيان سان استعمال ڪري سگهجي ٿو . مثال طور، اسان هڪ سخت غذا لاء هڪ پروگرام لکي رهيا آهيون، جنهن ۾ طعام روزانو مقرر ڪيا ويا آهن:
public class VeryStrictDiet {
   public void takeLunch(DayOfWeek dayOfWeek) {
       switch (dayOfWeek) {
           case SUNDAY:
               System.out.println("Sunday lunch! Today you can even have a little sweet");
               break;
           case MONDAY:
               System.out.println("Monday Lunch: Chicken Noodles!");
               break;
           case TUESDAY:
               System.out.println("Tuesday, today is celery soup :(");
               break;
               //...and so on until the end
       }
   }
}
ھي ھڪڙو پراڻو حل آھي Enum جي فائدن مان جيڪو Java 1.5 کان اڳ استعمال ڪيو ويو ھو: پراڻو حل سوئچ سان استعمال نٿو ڪري سگھجي .

Enum ڪلاس بابت توهان کي ٻيو ڇا ڄاڻڻ جي ضرورت آهي؟

Enum ڪلاس هڪ حقيقي طبقو آهي جيڪو سڀني صلاحيتن سان گڏ اچي ٿو. مثال طور، جيڪڏھن ھفتي جي ڏينھن جو موجوده نفاذ توھان لاءِ ڪافي نه آھي، توھان شامل ڪري سگھو ٿا variables، ٺاھيندڙ ۽ طريقا DayOfWeek :
public enum DayOfWeek {

   SUNDAY ("Sunday"),
   MONDAY ("Monday"),
   TUESDAY ("Tuesday"),
   WEDNESDAY ("Wednesday"),
   THURSDAY ("Thursday"),
   FRIDAY ("Friday"),
   SATURDAY ("Saturday");

   private String title;

   DayOfWeek(String title) {
       this.title = title;
   }

   public String getTitle() {
       return title;
   }

   @Override
   public String toString() {
       return "DayOfWeek{" +
               "title='" + title + '\'' +
               '}';
   }
}
اسان جي Enum جي مستقلن وٽ ھاڻي ٽائيٽل فيلڊ ، ھڪ گيٽر، ۽ ھڪ اوور رائڊ ٿيل ٽو اسٽرينگ طريقو آھي . باقاعده طبقن جي مقابلي ۾، Enum هڪ سنگين حد آهي - ان کان وراثت نه ٿي سگهي. ان کان علاوه، ڳڻپ جا طريقا آھن انھن لاءِ منفرد:
  • values() : Enum ۾ محفوظ ڪيل سڀني قدرن جو هڪ صف واپس ڏئي ٿو:

    public static void main(String[] args) {
       		System.out.println(Arrays.toString(DayOfWeek.values()));
    }

    نتيجو:

    [DayOfWeek{title='Sunday'}, DayOfWeek{title='Monday'}, DayOfWeek{title='Tuesday'}, DayOfWeek{title='Wednesday'}, DayOfWeek{title='Thursday'}, DayOfWeek{title= 'جمعو'}، ڏينهن جو هفتي{title='Saturday'}]

  • ordinal() : هڪ مستقل جو آرڊينل نمبر ڏي ٿو. ڳڻپ صفر کان شروع ٿئي ٿي:

    public static void main(String[] args) {
    
       		int sundayIndex = DayOfWeek.SUNDAY.ordinal();
       		System.out.println(sundayIndex);
    }

    نتيجو:

    0

  • valueOf() :ڏنل نالي سان ملندڙ هڪ Enum اعتراض ڏي ٿو:

    public static void main(String[] args) {
       DayOfWeek sunday = DayOfWeek.valueOf("SUNDAY");
       System.out.println(sunday);
    }

    نتيجو:

    هفتي جو ڏينهن{عنوان='آچر'}

توجهه ڏيو:اسان Enum عناصر جي نالن کي سرمائيداري ڪريون ٿا ڇاڪاڻ ته اهي مستقل آهن ۽ مستقل طور نامزد ڪيا ويا آهن، نه ڪي ڪيميڪل .
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION