logo

تعدادات جافا

ال التعداد في جافا هو نوع بيانات يحتوي على مجموعة ثابتة من الثوابت.

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

يمكن اعتبار Java Enums بمثابة فئات تحتوي على مجموعة ثابتة من الثوابت (متغير لا يتغير). ثوابت تعداد Java ثابتة ونهائية ضمنيًا. وهي متاحة منذ JDK 1.5.

ألوان جافا

يتم استخدام التعدادات لإنشاء نوع البيانات الخاص بنا مثل الفئات. ال التعداد يتم استخدام نوع البيانات (المعروف أيضًا باسم نوع البيانات التعدادية) لتعريف التعداد في Java. على عكس C/C++، فإن التعداد في Java أكثر من ذلك قوي . هنا، يمكننا تعريف التعداد إما داخل الفصل أو خارج الفصل.

يرث Java Enum داخليًا ملف فئة التعداد ، لذلك لا يمكنه أن يرث أي فئة أخرى، لكن يمكنه تنفيذ العديد من الواجهات. يمكن أن يكون لدينا حقول ومنشئات وأساليب وأساليب رئيسية في Java enum.

نقاط يجب تذكرها لـ Java Enum

  • يعمل التعداد على تحسين سلامة النوع
  • يمكن استخدام التعداد بسهولة في التبديل
  • يمكن اجتياز التعداد
  • يمكن أن يحتوي التعداد على حقول ومنشئات وأساليب
  • قد يقوم Enum بتنفيذ العديد من الواجهات ولكن لا يمكنه توسيع أي فئة لأنه يقوم بتوسيع فئة Enum داخليًا
نقاط تعداد جافا

مثال بسيط على Java Enum

 class EnumExample1{ //defining the enum inside the class public enum Season { WINTER, SPRING, SUMMER, FALL } //main method public static void main(String[] args) { //traversing the enum for (Season s : Season.values()) System.out.println(s); }} 
اختبره الآن

انتاج:

 WINTER SPRING SUMMER FALL 

دعونا نرى مثالاً آخر على Java enum حيث نستخدم أساليب value() و valueOf() و ordinal() في Java enum.

 class EnumExample1{ //defining enum within class public enum Season { WINTER, SPRING, SUMMER, FALL } //creating the main method public static void main(String[] args) { //printing all enum for (Season s : Season.values()){ System.out.println(s); } System.out.println('Value of WINTER is: '+Season.valueOf('WINTER')); System.out.println('Index of WINTER is: '+Season.valueOf('WINTER').ordinal()); System.out.println('Index of SUMMER is: '+Season.valueOf('SUMMER').ordinal()); }} 

انتاج:

 WINTER SPRING SUMMER FALL Value of WINTER is: WINTER Index of WINTER is: 0 Index of SUMMER is: 2 

ملاحظة: يضيف مترجم Java داخليًا أساليب value() وvalueOf() وordinal() داخل التعداد في وقت الترجمة. يقوم داخليًا بإنشاء فئة ثابتة ونهائية للتعداد.

ما هو الغرض من طريقة القيم () في التعداد؟

يضيف مترجم Java داخليًا طريقة القيم () عندما يقوم بإنشاء التعداد. يُرجع الأسلوبvalues()‎ مصفوفة تحتوي على جميع قيم التعداد.

ما هو الغرض من طريقة valueOf () في التعداد؟

يضيف مترجم Java داخليًا طريقة valueOf () عندما يقوم بإنشاء التعداد. تقوم طريقة valueOf() بإرجاع قيمة التعداد الثابت المحدد.

اختبار البرمجيات

ما هو الغرض من الطريقة الترتيبية () في التعداد؟

يضيف مترجم Java داخليًا الطريقة الترتيبية () عندما يقوم بإنشاء التعداد. تقوم الطريقة الترتيبية () بإرجاع فهرس قيمة التعداد.


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

يمكن تعريف التعداد داخل الفصل أو خارجه لأنه يشبه الفصل. الفاصلة المنقوطة (;) في نهاية ثوابت التعداد اختيارية. على سبيل المثال:

 enum Season { WINTER, SPRING, SUMMER, FALL } 

أو،

 enum Season { WINTER, SPRING, SUMMER, FALL; } 

كلا تعريفي Java enum متماثلان.

مثال على Java Enum: فئة خارجية محددة

 enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }} 
اختبره الآن

انتاج:

 WINTER 

مثال على Java Enum: تم تعريفه داخل الفصل

 class EnumExample3{ enum Season { WINTER, SPRING, SUMMER, FALL; }//semicolon(;) is optional here public static void main(String[] args) { Season s=Season.WINTER;//enum type is required to access WINTER System.out.println(s); }} 
اختبره الآن

انتاج:

 WINTER 

مثال Java Enum: الطريقة الرئيسية داخل Enum

إذا قمت بوضع الأسلوب main() داخل التعداد، يمكنك تشغيل التعداد مباشرة.

 enum Season { WINTER, SPRING, SUMMER, FALL; public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); } } 

انتاج:

قائمة تهيئة بايثون
 WINTER 

تهيئة قيم محددة لثوابت التعداد

ثوابت التعداد لها قيمة أولية تبدأ من 0، 1، 2، 3، وهكذا. لكن يمكننا تهيئة القيمة المحددة لثوابت التعداد عن طريق تحديد الحقول والمنشئات. كما هو محدد سابقًا، يمكن أن يحتوي Enum على حقول ومنشئات وأساليب.

مثال لتحديد القيمة الأولية لثوابت التعداد

 class EnumExample4{ enum Season{ WINTER(5), SPRING(10), SUMMER(15), FALL(20); private int value; private Season(int value){ this.value=value; } } public static void main(String args[]){ for (Season s : Season.values()) System.out.println(s+' '+s.value); }} 
اختبره الآن

انتاج:

 WINTER 5 SPRING 10 SUMMER 15 FALL 20 

منشئ نوع التعداد خاص. إذا لم تعلن عن أن المترجم الخاص يقوم بإنشاء مُنشئ خاص داخليًا.

 enum Season{ WINTER(10),SUMMER(20); private int value; Season(int value){ this.value=value; } } 

الكود الداخلي الذي تم إنشاؤه بواسطة المترجم للمثال أعلاه لنوع التعداد

 final class Season extends Enum { public static Season[] values() { return (Season[])$VALUES.clone(); } public static Season valueOf(String s) { return (Season)Enum.valueOf(Season, s); } private Season(String s, int i, int j) { super(s, i); value = j; } public static final Season WINTER; public static final Season SUMMER; private int value; private static final Season $VALUES[]; static { WINTER = new Season('WINTER', 0, 10); SUMMER = new Season('SUMMER', 1, 20); $VALUES = (new Season[] { WINTER, SUMMER }); } } 

هل يمكننا إنشاء مثيل Enum بواسطة كلمة رئيسية جديدة؟

لا، لأنه يحتوي على منشئين خاصين فقط.

هل يمكن أن يكون لدينا طريقة مجردة في التعداد؟

نعم بالطبع! يمكن أن يكون لدينا أساليب مجردة ويمكننا توفير تنفيذ هذه الأساليب.


Java Enum في بيان التبديل

يمكننا تطبيق التعداد على بيان التبديل كما في المثال المعطى:

مثال لتطبيق Enum على بيان التبديل

 class EnumExample5{ enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} public static void main(String args[]){ Day day=Day.MONDAY; switch(day){ case SUNDAY: System.out.println('sunday'); break; case MONDAY: System.out.println('monday'); break; default: System.out.println('other day'); } }} 
اختبره الآن

انتاج:

 monday