CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ اينم ڪلاس
John Squirrels
سطح
San Francisco

جاوا ۾ اينم ڪلاس

گروپ ۾ شايع ٿيل
سلام هن آرٽيڪل ۾ اسان توهان کي جاوا اينمس بابت ٻڌائڻ وارا آهيون . تصور ڪريو ته توھان کي ھيٺ ڏنل ڪم ڏنو ويو آھي: ھڪڙو ڪلاس ٺاھيو جيڪو ھفتي جا ڏينھن لاڳو ڪري . پهرين نظر ۾، اهو بلڪل سادو لڳي ٿو. توهان جو ڪوڊ ڪجهه هن طرح نظر ايندو:
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 حقيقي ڏينهن آهن، ۽ انهن مان هر هڪ جو هڪ مخصوص نالو آهي. تنهن ڪري، اسان جو ڪم ڪنهن حد تائين ممڪن قدرن جي حد تائين محدود ڪرڻ آهي DayOfWeek ڪلاس لاءِ. جاوا 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 Person {
    
       		public static void main(String[] args) {
    
           			DayOfWeek sunday = DayOfWeek.SUNDAY;
    
           			System.out.println(sunday);
      		 }
    }

    پيداوار:

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

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

سو جاوا اينم ڇا آهي؟

اچو ته ٻيهر ڏسو اسان جي DayOfWeek مثال:
public enum DayOfWeek {

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

   private DayOfWeek dayOfWeek;
   // ... other fields


   public DayOfWeek getDayOfWeek() {
       return dayOfWeek;
   }

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

   private StudentSchedule schedule;
   private boolean goToSchool;

   public void wakeUp() {

       if (this.schedule.getDayOfWeek() == DayOfWeek.SUNDAY) {
           System.out.println("Hooray, you can sleep more!");
       } else {
           System.out.println("Damn, time for school again :(");
       }
   }
}
wakeUp() طريقي ۾ ، اسان Java Enum استعمال ڪريون ٿا اهو طئي ڪرڻ لاءِ ته شاگرد کي اڳتي ڇا ڪرڻ گهرجي. اسان DayOfWeek ۾ هر فيلڊ بابت تفصيل فراهم نه ڪيو آهي ، ۽ اسان کي ضرورت ناهي: اهو واضح آهي ته هفتي جا ڏينهن ڪيئن ڪم ڪرڻ گهرجن. جيڪڏهن اسان ان کي موجوده شڪل ۾ استعمال ڪندا آهيون، ڪو به ڊولپر سمجهي سگهندو ته اسان جي ڪوڊ ۾ ڇا ٿي رهيو آهي. Enum جي سهولت جو هڪ ٻيو مثال اهو آهي ته ان جي مستقل کي سوئچ بيان سان استعمال ڪري سگهجي ٿو. مثال طور، اچو ته هڪ سخت غذا لاء هڪ پروگرام لکون، جنهن ۾ وينجن روزانو مقرر ڪيل آهن:
public class VeryStrictDiet {
   public void takeLunch(DayOfWeek dayOfWeek) {
       switch (dayOfWeek) {
           case SUNDAY:
               System.out.println("Sunday Dinner! You can even enjoy something a little sweet today.");
               break;
           case MONDAY:
               System.out.println("Lunch for Monday: chicken noodle soup!");
               break;
           case TUESDAY:
               System.out.println("Tuesday, today it's celery soup :(");
               break;
               //... and so on to the end
       }
   }
}
هي جاوا 1.5 کان اڳ استعمال ٿيل پراڻي حل تي Enums فائدن مان هڪ آهي - پراڻو حل سوئچ سان استعمال نه ٿي سگهيو . ٻيو ڇا توهان کي 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 Constants وٽ ھڪڙو عنوان فيلڊ، گيٽر، ۽ اووررائڊ ٽو اسٽرينگ طريقو آھي. باقاعده طبقن جي مقابلي ۾، هڪ سنگين حد Enum تي رکيل هئي - اهو وارث نه ٿي سگهي. اضافي طور تي، ڳڻپ جا خاصيتون آهن طريقا:
  • values() : Enum ۾ سڀني قدرن جو هڪ صف ڏئي ٿو :

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

    پيداوار:

    [DayOfWeek{title = 'Sunday'}, DayOfWeek{title = 'Sunday'}, DayOfWeek{title = 'منگل'}, DayOfWeek{title = 'اربع'}, DayOfWeek{title = 'خميس'}، DayOfWeek{title = 'جمعو'}، ڏينهن جو هفتي{عنوان = 'ڇنڇر'}]

  • 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 شعبن کي بيان ڪرڻ لاء وڏي اکر استعمال ڪندا آهيون . اھي مستقل آھن تنھنڪري اھي سڀ ڪيپ استعمال ڪن ٿا بجاءِ CamelCase .
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION