التعدادات في Java (التعدادات) هي نوع خاص يستخدم لتعريف مجموعة من الثوابت المسماة.
- تساعد التعدادات في سهولة القراءة وقابلية الصيانة وأمان الكتابة في البرامج عن طريق تعيين أسماء ذات معنى لقيم الأعداد الصحيحة.
- يكون هذا مفيدًا بشكل أساسي عندما يكون لدينا مجموعة صغيرة من القيم المحتملة لعنصر ما، مثل الاتجاهات وأيام الأسبوع وما إلى ذلك.
إنشاء التعداد
بناء الجملة:
Javaالتعداد اسم التعداد {
ثابت 1 ثابت 2 ثابت 3؛
}
ما هو Desktop.ini
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 كما هو مذكور أدناه:
- نوع الفصل: يتم تنفيذها داخليًا كفصل دراسي.
- ثوابت التعداد: كل ثابت هو كائن من نوع التعداد.
- دعم التبديل: يمكن استخدامها في بيانات التبديل.
- المعدلات الضمنية: الثوابت نهائية عامة ثابتة.
- الميراث: لا يمكن للتعدادات توسيع الفئات ولكن يمكنها تنفيذ الواجهات.
التعداد في بيان التبديل
يمكن استخدام التعدادات في عبارات التبديل للتعامل مع الحالات المختلفة بناءً على ثوابت التعداد.
Javaimport 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
التعداد مع أساليب مجردة
يمكن للتعدادات أن تعلن عن طرق مجردة يجب على كل ثابت تنفيذها.
Javaenum 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() للتنقل خلال كافة ثوابت التعداد.
Javaenum 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() بالتكرار على نطاق محدد من ثوابت التعداد.
إذا كانت البيانات الأخرى JavaJava
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 عبارة عن فئة عادية وليست تعدادًا، لذلك نقوم بإنشاء مثيلات وتمرير قيمة التعداد إلى مُنشئها.