CodeGym /Java Blog /এলোমেলো /জাভাতে এনাম ক্লাস
John Squirrels
লেভেল 41
San Francisco

জাভাতে এনাম ক্লাস

এলোমেলো দলে প্রকাশিত
ওহে! এই নিবন্ধে আমরা আপনাকে Java Enums সম্পর্কে বলতে যাচ্ছি । কল্পনা করুন যে আপনাকে নিম্নলিখিত কাজটি দেওয়া হয়েছে: একটি ক্লাস তৈরি করুন যা সপ্তাহের দিনগুলি প্রয়োগ করে । প্রথম নজরে, এটি বেশ সোজা বলে মনে হচ্ছে। আপনার কোড এই মত কিছু দেখতে হবে:

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 ক্লাসের কনস্ট্রাক্টরের কাছে যেকোনো পাঠ্য পাঠাতে পারেন। তার মানে কেউ "ব্যাঙ", "ক্লাউড" বা "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 দিন আছে, এবং কেউ নতুন তৈরি করতে পারে না। এই সমাধানটি জোশুয়া ব্লচ তার বই ইফেক্টিভ জাভাতে দিয়েছিলেন । যাইহোক, সেই বইটি খুব দুর্দান্ত এবং যে কোনও জাভা বিকাশকারীর জন্য অবশ্যই পড়া উচিত। কিভাবে Enum ক্লাস ব্যবহার করবেন - 2জাভা 1.5 প্রকাশের সাথে, ভাষাটি এই ধরনের পরিস্থিতির জন্য একটি প্রস্তুত সমাধান অর্জন করেছে: Java Enumsজাভাতে Enum ও একটি ক্লাস। এটি বিশেষভাবে "সূক্ষ্ম টিউন" এর মতো সমস্যাগুলি সমাধান করার জন্য, অর্থাৎ মানগুলির একটি নির্দিষ্ট সীমিত পরিসর তৈরি করা। জাভার নির্মাতাদের ইতিমধ্যে প্রস্তুত উদাহরণ ছিল (উদাহরণস্বরূপ, C এর ইতিমধ্যেই enum ছিল ), তাই তারা সেরা বৈকল্পিক তৈরি করতে সক্ষম হয়েছিল।

তাই জাভা Enum কি?

আসুন আমাদের DayOfWeek উদাহরণটি আবার দেখুন:

public enum DayOfWeek {

   SUNDAY,
   MONDAY,
   TUESDAY,
   WEDNESDAY,
   THURSDAY,
   FRIDAY,
   SATURDAY
}
এখন এটি অনেক সহজ দেখাচ্ছে :) অভ্যন্তরীণভাবে, আমাদের Enum-এ 7টি স্ট্যাটিক ধ্রুবক রয়েছে। এবং যে কিছু আমরা এটি ব্যবহার করতে পারেন একটি প্রোগ্রাম বাস্তবায়ন. উদাহরণস্বরূপ, আসুন একটি প্রোগ্রাম লিখি যা নির্ধারণ করে যে একজন শিক্ষার্থীকে আজ স্কুলে যেতে হবে কিনা। আমাদের ছাত্রের একটি দৈনিক সময়সূচী থাকবে, যা StudentScedule ক্লাস দ্বারা প্রতিনিধিত্ব করবে:

public class StudentSchedule {

   private DayOfWeek dayOfWeek;
   // ... other fields


   public DayOfWeek getDayOfWeek() {
       return dayOfWeek;
   }

   public void setDayOfWeek(DayOfWeek dayOfWeek) {
       this.dayOfWeek = 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
       }
   }
}
Java 1.5 এর আগে ব্যবহৃত পুরানো সমাধানের তুলনায় এটি Enums সুবিধাগুলির মধ্যে একটি — পুরানো সমাধানটি সুইচ দিয়ে ব্যবহার করা যাবে না । Enum সম্পর্কে আপনার আর কি জানা দরকার ? Enum হল একটি বাস্তব শ্রেণী যার সমস্ত সম্ভাবনা রয়েছে। উদাহরণস্বরূপ, যদি সপ্তাহের দিনগুলির বর্তমান বাস্তবায়ন অপর্যাপ্ত হয়, আপনি 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 = 'শনিবার'}]

  • 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