التعداد في جافا

التعدادات في Java (التعدادات) هي نوع خاص يستخدم لتعريف مجموعة من الثوابت المسماة.

  • تساعد التعدادات في سهولة القراءة وقابلية الصيانة وأمان الكتابة في البرامج عن طريق تعيين أسماء ذات معنى لقيم الأعداد الصحيحة.
  • يكون هذا مفيدًا بشكل أساسي عندما يكون لدينا مجموعة صغيرة من القيم المحتملة لعنصر ما، مثل الاتجاهات وأيام الأسبوع وما إلى ذلك.

إنشاء التعداد

بناء الجملة:

التعداد اسم التعداد {

ثابت 1 ثابت 2 ثابت 3؛

}

Java
   enum     TrafficLight     {      RED       GREEN       YELLOW  ;   }   public     class   Test  {          public     static     void     main  (  String  []     args  ){          TrafficLight     x     =     TrafficLight  .  RED  ;      System  .  out  .  println  (  x  );      }   }   

الإخراج
RED  

إعلان التعداد في جافا

يمكن إجراء إعلان التعداد خارج الفصل أو داخل الفصل ولكن ليس داخل الطريقة.

1. إعلان خارج الصف

كما رأينا في المثال أعلاه، يمكن الإعلان عن التعدادات خارج الفصل الدراسي والوصول إليها مباشرة

2. الإعلان داخل الفصل

يمكن أيضًا الإعلان عن التعدادات داخل الفصل الدراسي ولكن ليس داخل الطريقة.

Java
   public     class   Test     {      enum     Color     {      RED        GREEN        BLUE  ;      }      // Driver method      public     static     void     main  (  String  []     args  )     {      Color     c1     =     Color  .  RED  ;      System  .  out  .  println  (  c1  );      }   }   

الإخراج
RED  

خصائص التعداد في جافا

هناك بعض الخصائص التي يتبعها Enum كما هو مذكور أدناه:

  • نوع الفصل: يتم تنفيذها داخليًا كفصل دراسي.
  • ثوابت التعداد: كل ثابت هو كائن من نوع التعداد.
  • دعم التبديل: يمكن استخدامها في بيانات التبديل.
  • المعدلات الضمنية: الثوابت نهائية عامة ثابتة.
  • الميراث: لا يمكن للتعدادات توسيع الفئات ولكن يمكنها تنفيذ الواجهات.

التعداد في بيان التبديل

يمكن استخدام التعدادات في عبارات التبديل للتعامل مع الحالات المختلفة بناءً على ثوابت التعداد.

Java
   import     java.io.*  ;   class   GFG  {          // Enum Declared      enum     Color     {      RED        GREEN        BLUE        YELLOW  ;      }      public     static     void     main  (  String  []     args  ){          Color     var_1     =     Color  .  YELLOW  ;      // Switch case with Enum      switch     (  var_1  )     {      case     RED  :      System  .  out  .  println  (  'Red color'  );      break  ;      case     GREEN  :      System  .  out  .  println  (  'Green color'  );      break  ;      case     BLUE  :      System  .  out  .  println  (  'Blue color'  );      break  ;      default  :      System  .  out  .  println  (  'Other color'  );      }      }   }   

الإخراج
Other color  

التعداد مع الأساليب والمنشئ

يمكن أن يكون للتعدادات مُنشئات وطرق يتم تنفيذها بشكل منفصل لكل ثابت

Java
   enum     Color  {      RED       GREEN       BLUE  ;      private     Color  (){          System  .  out  .  println  (  'Constructor called for: '     +     this  );      }      public     void     display  (){          System  .  out  .  println  (  'Color is: '     +     this  );      }   }   public     class   Test  {          public     static     void     main  (  String  []     args  ){          Color     c1     =     Color  .  RED  ;      c1  .  display  ();      }   }   

الإخراج
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED  

التعداد مع أساليب مجردة

يمكن للتعدادات أن تعلن عن طرق مجردة يجب على كل ثابت تنفيذها.

Java
   enum     Day  {          MONDAY  {          public     String     getNumber  (){      return     '1st day'  ;             }      }      FRIDAY  {          public     String     getNumber  (){      return     '5th day'  ;             }      };          public     abstract     String     getNumber  ();   }   public     class   EnumTest     {      public     static     void     main  (  String  []     args  ){          System  .  out  .  println  (  Day  .  MONDAY  .  getNumber  ());         System  .  out  .  println  (  Day  .  FRIDAY  .  getNumber  ());      }   }   

الإخراج
1st day 5th day  

تكرار التعدادات باستخدام القيم ()

استخدم EnumType.values() للتنقل خلال كافة ثوابت التعداد.

Java
   enum     Color  {      RED       GREEN       BLUE  ;       }   public     class   Test  {          public     static     void     main  (  String  []     args  ){          for     (  Color     c     :     Color  .  values  ()){          System  .  out  .  println  (  c  );      }      }   }   

الإخراج
RED GREEN BLUE  

Enum وEnumSet (تكرار نطاق محدد)

يسمح EnumSet.range() بالتكرار على نطاق محدد من ثوابت التعداد.

Java
   import     java.util.EnumSet  ;   public     class   EnumSetExample  {          enum     Day  {          SUNDAY       MONDAY       TUESDAY       WEDNESDAY       THURSDAY       FRIDAY       SATURDAY  ;             }      public     static     void     main  (  String  []     args  ){          EnumSet   <  Day  >     workDays     =     EnumSet  .  range  (  Day  .  TUESDAY       Day  .  FRIDAY  );      for     (  Day     d     :     workDays  ){          System  .  out  .  println  (  d  );      }      }   }   

الإخراج
TUESDAY WEDNESDAY THURSDAY FRIDAY  

إنشاء فئة مع عضو التعداد

يمكننا دمج التعدادات مع الصفوف العادية لتنظيم منطق البرنامج الخاص بك. يمكن أن يكون التعداد متغيرًا عضوًا في الفصل ويمكن للطرق تنفيذ إجراءات بناءً على قيمة التعداد.

Java
   /*package whatever //do not write package name here */   import     java.io.*  ;   enum     Day     {      MONDAY        TUESDAY        WEDNESDAY        THURSDAY        FRIDAY        SATURDAY        SUNDAY   }   public     class   EnumTest     {      // Enum member variable      Day     day  ;      // constructor which takes enum value      public     EnumTest  (  Day     day  )     {     this  .  day     =     day  ;     }      // method to execute action as per enum value      public     void     tellItLikeItIs  ()      {      switch     (  day  )     {      case     MONDAY  :      System  .  out  .  println  (  'Mondays are tough'  );      break  ;      case     TUESDAY  :      System  .  out  .  println  (  'Tuesday are better'  );      break  ;      case     WEDNESDAY  :      System  .  out  .  println  (  'Wednesday are okay'  );      break  ;      case     THURSDAY  :      System  .  out  .  println  (  'Thursdays are hopeful'  );      break  ;      case     FRIDAY  :      System  .  out  .  println  (  'Fridays are exciting'  );      break  ;      case     SATURDAY  :      System  .  out  .  println  (  'Saturdays are relaxing'  );      break  ;      case     SUNDAY  :      System  .  out  .  println  (  'Sunday are for rest'  );      break  ;      default  :      System  .  out  .  println  (  'Everyday are good'  );      break  ;      }      }      public     static     void     main  (  String  []     args  )      {      EnumTest     firstDay     =     new     EnumTest  (  Day  .  MONDAY  );      firstDay  .  tellItLikeItIs  ();      EnumTest     thirdDay     =     new     EnumTest  (  Day  .  WEDNESDAY  );      thirdDay  .  tellItLikeItIs  ();      EnumTest     fifthDay     =     new     EnumTest  (  Day  .  FRIDAY  );      fifthDay  .  tellItLikeItIs  ();      EnumTest     sixthDay     =     new     EnumTest  (  Day  .  SATURDAY  );      sixthDay  .  tellItLikeItIs  ();      EnumTest     seventhDay     =     new     EnumTest  (  Day  .  SUNDAY  );      seventhDay  .  tellItLikeItIs  ();      }   }   

الإخراج
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest  

توضيح:

  • يتم إنشاء فئة EnumTest في الكود أعلاه باستخدام عضو من النوع Day. يحتوي على مُنشئ يأخذ تعداد Day كوسيطة ويقوم بتعيينه.
  • يحتوي الفصل على طريقة TellItLikeItIs() التي تطبع الرسالة بناءً على قيمة اليوم.
  • تتضمن الطريقة الرئيسية كائنات EnumTest باستخدام قيم تعداد يومية مختلفة واستدعاء طريقة TellItLikeItIs() في كل منها.

ملحوظة: يتم استخدام الكلمة الأساسية الجديدة لأن EnumTest عبارة عن فئة عادية وليست تعدادًا، لذلك نقوم بإنشاء مثيلات وتمرير قيمة التعداد إلى مُنشئها.