logo

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

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

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

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

بناء الجملة:



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

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

}



ما هو Desktop.ini
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
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 عبارة عن فئة عادية وليست تعدادًا، لذلك نقوم بإنشاء مثيلات وتمرير قيمة التعداد إلى مُنشئها.