دليل المبتدئين إلى Java eNum - لماذا ولماذا يجب أن أستخدم Enum؟ أمثلة على Java Enum
نشرت: 2019-04-23
التعدادات هي قوائم من constants مثل المتغيرات غير القابلة للتغيير. هل سمعت عن Final keyword ؟ انها مثل هذه.
عندما تحتاج إلى قائمة قيم محددة مسبقًا والتي تمثل نوعًا من البيانات الرقمية أو النصية ، يجب عليك استخدام التعداد. على سبيل المثال ، في لعبة الشطرنج يمكنك تمثيل الأنواع المختلفة من القطع على هيئة تعداد:
|
1 2 3 4 5 6 7 8 |
enum ChessPiece { PAWN , ROOK , KNIGHT , BISHOP , QUEEN , KING ; } |
يجب عليك دائمًا استخدام التعدادات عندما يمكن للمتغير (خاصة معلمة الطريقة) أن يأخذ واحدًا فقط من مجموعة صغيرة من القيم الممكنة. من الأمثلة على ذلك ثوابت النوع (حالة العقد: "دائم" ، "مؤقت" ، "مبتدئ") ، أو علامات ("تنفيذ الآن" ، "تأجيل التنفيذ").
إذا كنت تستخدم التعدادات بدلاً من الأعداد الصحيحة (أو أكواد السلسلة) ، فإنك تزيد من تدقيق وقت الترجمة وتتجنب الأخطاء من تمرير الثوابت غير الصالحة ، وتوثق القيم التي يُسمح باستخدامها.

مثال جافا :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public enum Company { EBAY , PAYPAL , GOOGLE , YAHOO , ATT } Company cName ; public CrunchifyEnumExample ( Company cName ) { this . cName = cName ; } public void companyDetails ( ) { switch ( cName ) { case EBAY : System . out . println ( "EBAY: Biggest Market Place in the World." ) ; break ; case PAYPAL : System . out . println ( "PAYPAL: Simplest way to manage Money." ) ; break ; case GOOGLE : case YAHOO : System . out . println ( "YAHOO: 1st Web 2.0 Company." ) ; break ; default : System . out . println ( "DEFAULT: Google - biggest search giant.. ATT - my carrier provider.." ) ; break ; } } public static void main ( String [ ] args ) { CrunchifyEnumExample ebay = new CrunchifyEnumExample ( Company . EBAY ) ; ebay . companyDetails ( ) ; CrunchifyEnumExample paypal = new CrunchifyEnumExample ( Company . PAYPAL ) ; paypal . companyDetails ( ) ; CrunchifyEnumExample google = new CrunchifyEnumExample ( Company . GOOGLE ) ; google . companyDetails ( ) ; CrunchifyEnumExample yahoo = new CrunchifyEnumExample ( Company . YAHOO ) ; yahoo . companyDetails ( ) ; CrunchifyEnumExample att = new CrunchifyEnumExample ( Company . ATT ) ; att . companyDetails ( ) ; } } |
انتاج:
|
1 2 3 4 5 6 7 |
EBAY : Biggest Market Place in the World . PAYPAL : Simplest way to manage Money . YAHOO : 1st Web 2.0 Company . YAHOO : 1st Web 2.0 Company . DEFAULT : Google - biggest search giant . . ATT - my carrier provider . . Process finished with exit code 0 |
بعض النقاط المهمة جدًا في Java Enum:
النقطة 1
جميع التعدادات تتضمن ضمنيًا java.lang.Enum . نظرًا لأن Java لا تدعم الوراثة المتعددة ، لا يمكن للتعداد توسيع أي شيء آخر.
النقطة 2
Enum in Java are type-safe: يحتوي Enum على مساحة اسم خاصة به. هذا يعني أن التعداد الخاص بك سيكون له نوع على سبيل المثال "الشركة" في المثال أدناه ولا يمكنك تعيين أي قيمة بخلاف المحدد في Enum Constants.
|
1 2 3 4 5 6 |
public enum Company { EBAY , PAYPAL , GOOGLE , YAHOO , ATT } Company cName = Company . EBAY ; cName = 1 ; // Compilation Error |
نقطة 3
يمكنك تحديد قيم ثوابت التعداد في وقت الإنشاء. MyEnum.values() بإرجاع صفيف من قيم MyEnum.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public enum Company { EBAY ( 30 ) , PAYPAL ( 10 ) , GOOGLE ( 15 ) , YAHOO ( 20 ) , ATT ( 25 ) ; private int value ; private Company ( int value ) { this . value = value ; } } public static void main ( String [ ] args ) { for ( Company cName : Company . values ( ) ) { System . out . println ( "Company Value: " + cName . value + " - Company Name: " + cName ) ; } } } |
انتاج:

|
1 2 3 4 5 |
Company Value : 30 - Company Name : EBAY Company Value : 10 - Company Name : PAYPAL Company Value : 15 - Company Name : GOOGLE Company Value : 20 - Company Name : YAHOO Company Value : 25 - Company Name : ATT |
النقطة 4
ثوابت التعداد ثابتة ونهائية بشكل ضمني ولا يمكن تغييرها بمجرد إنشائها.
نقطة 5
يمكن مقارنة Enum بأمان باستخدام:
- بيان حالة التبديل
- == عامل التشغيل
- طريقة .equals () الرجاء اتباع البرنامج التعليمي الكامل.
|
1 2 3 4 |
Company eBay = Company . EBAY ; if ( eBay == Company . EBAY ) { log . info ( "enum in java can be compared using ==" ) ; } |
نقطة 6
لا يمكنك إنشاء مثيل من التعدادات باستخدام عامل تشغيل جديد في Java لأن مُنشئ Enum في Java يمكن أن يكون خاصًا فقط ولا يمكن إنشاء ثوابت Enums إلا داخل Enums نفسه.
نقطة 7
يتم إنشاء مثيل Enum في Java عند استدعاء أي من ثوابت Enum أو الإشارة إليها في الكود لأول مرة.
نقطة 8
يحدد التعداد قائمة بالقيم الثابتة المعينة للنوع.
نقطة 9
يمكن الإعلان عن التعداد خارج الفصل الدراسي أو داخله ، ولكن ليس بطريقة ما.
نقطة 10
يجب عدم وضع علامة على التعداد الذي تم الإعلان عنه خارج فصل دراسي ثابتًا أو نهائيًا أو مجردًا أو محميًا أو خاصًا
نقطة 11
يمكن أن تحتوي Enums على المنشئات ، والطرق ، والمتغيرات ، والهيئات الصنفية الثابتة.
نقطة 12
يمكن أن ترسل ثوابت التعداد وسيطات إلى مُنشئ التعداد ، باستخدام بناء الجملة BIG (8) ، حيث يتم تمرير int literal 8 إلى مُنشئ التعداد.
نقطة 13
يمكن أن يكون لمنشئي التعداد حجج ، ويمكن أن يتم تحميلهم فوق طاقتهم.
نقطة 14
لا يمكن أبدا استدعاء منشئات التعداد مباشرة في الكود. يتم استدعاؤها دائمًا تلقائيًا عند تهيئة التعداد.
نقطة 15
تعتبر الفاصلة المنقوطة في نهاية إعلان التعداد اختيارية.
هذه قانونية:
- تعداد فو {واحد ، اثنان ، ثلاثة}
- تعداد Foo {ONE، TWO، THREE} ؛
مثال آخر بسيط على Java eNUM:

Enums هي قوائم الثوابت. عندما تحتاج إلى قائمة قيم محددة مسبقًا والتي تمثل نوعًا من البيانات الرقمية أو النصية ، يجب عليك استخدام التعداد.
يجب عليك دائمًا استخدام التعدادات عندما يمكن للمتغير (خاصة معلمة الطريقة) أن يأخذ واحدًا فقط من مجموعة صغيرة من القيم الممكنة. من الأمثلة على ذلك ثوابت النوع (حالة العقد: "دائم" ، "مؤقت" ، "مبتدئ") ، أو علامات ("تنفيذ الآن" ، "تأجيل التنفيذ").
إذا كنت تستخدم التعدادات بدلاً من الأعداد الصحيحة (أو أكواد السلسلة) ، فإنك تزيد من تدقيق وقت الترجمة وتتجنب الأخطاء من تمرير الثوابت غير الصالحة ، وتوثق القيم التي يُسمح باستخدامها.
بين ذلك ، قد يعني الإفراط في استخدام التعدادات أن الأساليب الخاصة بك تفعل الكثير (غالبًا ما يكون من الأفضل أن يكون لديك عدة طرق منفصلة ، بدلاً من طريقة واحدة تأخذ العديد من العلامات التي تعدل ما تفعله) ، ولكن إذا كان عليك استخدام العلامات أو أكواد الكتابة ، فقم بالتعداد هي الطريق للذهاب.
هذا مثال بسيط جدًا لـ Java eNum
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public enum CrunchifyEnumCompany { GOOGLE ( "G" ) , YAHOO ( "Y" ) , EBAY ( "E" ) , PAYPAL ( "P" ) ; private String companyLetter ; private CrunchifyEnumCompany ( String s ) { companyLetter = s ; } public String getCompanyLetter ( ) { return companyLetter ; } } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com . crunchify . tutorials ; import com . crunchify . tutorials . CrunchifyEnumCompany ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public static void main ( String [ ] args ) { System . out . println ( "Get enum value for Comapny 'eBay': " + CrunchifyEnumCompany . EBAY . getCompanyLetter ( ) ) ; } } |
انتاج:
|
1 |
Get enum value for Comapny 'eBay' : Value : E |
