English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، سنتعلم المعدد في Java. سنتعلم إنشاء واستخدام المعدد والمعدد الكائن من خلال أمثلة.
في Java، المعدد هو نوع يحتوي على مجموعة محددة من القيم الممكنة. نستخدم كلمة المفتاح enum لتحديد المعدد. على سبيل المثال،
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
في هذا السياق، قمنا بإنشاء معادد يُدعى Size.
القيم الموجودة داخل الأقواس المثلثة تُسمى قيم المعدد (معادلة). هذه هي القيم الفريدة التي يمكن أن يحتفظ بها نوع المعدد.
ملاحظة:تُعطى القيم المتعارف عليها في المعدد عادةً بأحرف كبيرة.
دعونا نأخذ مثالاً بسيطاً.
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } فئةُ رئيسية { public static void main(String[] args) { System.out.println(Size.SMALL); System.out.println(Size.MEDIUM); } }
نتيجة الإخراج
SMALL MEDIUM
من خلال المثال السابق، يمكننا ملاحظة أننا نستخدم اسم النوع لاستدعاء قيم المعادلة.
بالنسبة لذلك، يمكننا إنشاء متغيرات النوع المعدد.
Size pizzaSize;
في هذا المكان، pizzaSize هو متغير نوع Size. يمكن تخصيصه فقط لـ 4 قيم.}}
pizzaSize = Size.SMALL; pizzaSize = Size.MEDIUM; pizzaSize = Size.LARGE; pizzaSize = Size.EXTRALARGE;
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } فئة Test { Size pizzaSize; العمومية Test(Size pizzaSize) { this.pizzaSize = pizzaSize; } العمومية void طلببيتزا() { الانتقال إلى pizzaSize { حالةُ صغير: System.out.println("لقد طلبت بيتزا صغيرة."); الإنهاء; حالةُ وسط: System.out.println("لقد طلبت بيتزا وسط."); الإنهاء; default: System.out.println("لا أعرف أي شيء أريد طلبه."); الإنهاء; } } } فئةُ رئيسية { public static void main(String[] args) { Test t1 = new Test(Size.MEDIUM); t1.orderPizza(); } }
نتيجة الإخراج
لقد طلبت بيتزا وسط.
في البرنامج المذكور أعلاه، قمنا بإنشاء نوع معادلة Size. ثم، قمنا بتعريف متغير من نوع Size يُدعى pizzaSize.
يمكن تخصيص المتغير pizzaSize فقط لـ 4 قيم (صغير، وسط، كبير، كبير جدًا).
تم تخصيص المتغير pizzaSize بقيمة الكونstant MEDIUM. بناءً على ذلك، سيتم طباعة حالة واحدة من جملة الانتقال.
في Java، يتم اعتبار نوع المعادلة نوعًا خاصًا من الفئات. تم إدخالها في إصدار Java 5.
يمكن للفئة المعادلة أن تحتوي على طرق ومجالات مثل الفئة العادية.
enum Size { القيمة الثابتة1، القيمة الثابتة2، ...، القيمة الثابتةN; //الطرق والمجالات }
القيم المعادلة دائمًا ما تكون عمومية ثابتة.
عند إنشاء فئة معادلة، سيقوم المُراجع أيضًا بإنشاء كائن (مثال) لكل قيمة معادلة (معادلة).
الترتيب Size{ صغير، وسط، كبير، كبير جدًا; العمومية String الحجم() { //سيقوم هذا بالإشارة إلى الكائن الصغير الانتقال إلى هذا (this) { حالةُ صغير: الرجوع "صغير"; حالةُ وسط: return "medium"; case LARGE: return "large"; case EXTRALARGE: return "extra large"; default: return null; } } public static void main(String[] args) { //استخدام المثال SMALL لتشغيل طريقة getSize() System.out.println("حجم البيتزا هو " + Size.SMALL.getSize()); } }
نتيجة الإخراج
حجم البيتزا هو small
في المثال السابق، قمنا بإنشاء فئة تحديد Size تحتوي على أربعة قيم ثابتة هي SMALL، MEDIUM، LARGE وEXTRALARGE.
بما أن Size هي فئة تحديد، فإن المترجم سينشئ تلقائيًا مثالاً لكل قيمة ثابتة
في داخل طريقة main()، قمنا باستخدام المثال SMALL لتشغيل طريقة getSize()
تمثل فئة التحديد كفئة عادية وتستطيع أن تحتوي أيضًا على بناء. للحصول على معلومات إضافية، يرجى زيارةوظائف بناء Java Enum.
توجد بعض الطرق المعدة مسبقًا في فئة التحديد يمكن استخدامها في أي وقت.
تستعيد طريقة ordinal() موقع القيمة الثابتة في قائمة التحديد. على سبيل المثال،
ordinal(SMALL) //يستعيد 0
تقارن طريقة compareTo() القيمة الثابتة بناءً على الرقم التسلسلي. على سبيل المثال،
Size.SMALL.compareTo(Size.MEDIUM) //يستعيد ordinal(SMALL) - ordinal(MEDIUM)
تستعيد طريقة toString() شكل نصي لقيمة الثابتة في قائمة التحديد. على سبيل المثال،
SMALL.toString() //يستعيد "SMALL"
تستعيد طريقة name() اسم القيمة الثابتة لقائمة التحديد على شكل نص. تُعتبر القيمة التي تعود بها طريقة name() ثابتة. على سبيل المثال،
name(SMALL) //يستعيد "SMALL"
تستخدم طريقة valueOf() نصًا وتستعيد قيمة ثابتة من قائمة التحديد تحتوي على نفس الاسم النصي. على سبيل المثال،
Size.valueOf("SMALL") //يستعيد القيمة الثابتة SMALL
يستعيد طريقة values() مصفوفة نوع قائمة التحديد تحتوي على جميع القيم الثابتة. على سبيل المثال،
Size[] enumArray = Size.value();
في Java، تم إدخال enum لتعويض استخدام القيم الثابتة من النوع int.
افترض أننا قد استخدمنا مجموعة القيم الدائمة من النوع int.
class Size { public final static int SMALL = 1; public final static int MEDIUM = 2; public final static int LARGE = 3; public final static int EXTRALARGE = 4; }
هنا، إذا قمنا بطباعة القيم، فإن المشكلة ستظهر. هذا لأنها تطبع أرقامًا فقط، وربما لن تكون هذه المعلومات مفيدة.
لذلك، يمكننا ببساطة استخدام الإnumer بدلاً من استخدام القيم الدائمة من النوع int. على سبيل المثال،
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
هذا يجعل شيفرة برمجتنا أكثر وضوحًا.
بالمثل، يوفر الإnumer التأكد من النوع عند التجميع.
إذا أعلنا عن متغير نوع Size (مثل المثال أعلاه)، يمكننا التأكد من أن هذا المتغير سيحتوي على واحد من الأربعة أرقام. إذا حاولنا إرسال أي قيمة أخرى غير هذه الأربعة، فإن المُعالج سيقوم بإطلاق خطأ.