1. الخلفية
قبل تقديم لغة Java ، فإن النمط الشائع للإشارة إلى نوع التعداد هو إعلان مجموعة من ثوابت INT. الكود الذي استخدمناه لتحديده قبل استخدام طريقة الثابت النهائية العامة هو كما يلي ، وذلك باستخدام 1 لتمثيل الربيع ، 2 لتمثيل الصيف ، 3 لتمثيل الخريف ، و 4 لتمثيل الشتاء.
موسم الطبقة العامة {Public Static Final Spring = 1 ؛ صيف عام ثابت عام = 2 ؛ الخريف النهائي الثابت العام = 3 ؛ الشتاء العام الثابت العام = 4 ؛}وتسمى هذه الطريقة نمط التعداد int. ولكن ما الخطأ في هذا النموذج؟ لقد استخدمناها لفترة طويلة ، لذلك لا ينبغي أن تكون هناك مشكلة. عادةً ما يأخذ الرمز الذي نكتبه في الاعتبار أمانه وسهولة الاستخدام وسهولة القراءة. أولاً ، دعونا نفكر في سلامتها. بالطبع هذا النمط ليس آمنًا من النوع. على سبيل المثال ، نقوم بتصميم وظيفة تتطلب قيمة معينة في الربيع والصيف والخريف والشتاء. ومع ذلك ، مع نوع int ، لا يمكننا أن نضمن أن القيمة التي تم تمريرها هي قانونية. الرمز يشبه هذا:
private string getChineseseass (int season) {StringBuffer result = new StringBuffer () ؛ Switch (Season) {case season.spring: result.append ("Spring") ؛ استراحة؛ Case Season.Summer: result.append ("Summer") ؛ استراحة؛ Case Season.Autumn: result.append ("Autumn") ؛ استراحة؛ Case Season.Winter: result.append ("Winter") ؛ استراحة؛ الافتراضي: result.append ("موسم لا شيء على الأرض") ؛ استراحة؛ } return result.toString () ؛ )برنامج GetChineseseass (Season.Spring) هو الطريقة التي نتوقع استخدامها. لكن من الواضح أن GetChineseseason (5) ليس هو الحال ، والتجميع سلبي للغاية. لا نعرف ما يحدث في وقت التشغيل. من الواضح أن هذا لا يتوافق مع نوع سلامة برامج Java.
بعد ذلك ، دعونا نفكر في قابلية قراءة هذا النمط. معظم المناسبات عند استخدام التعدادات ، يجب أن أكون مريحة للحصول على تعبيرات سلسلة من نوع التعداد. إذا طبعنا ثوابت التعداد int ، فإن ما نراه هو مجموعة من الأرقام ، وهي ليست مفيدة للغاية. قد نفكر في استخدام ثوابت السلسلة بدلاً من ثوابت int. على الرغم من أنه يوفر سلاسل قابلة للطباعة لهذه الثوابت ، إلا أنها تسبب مشاكل في الأداء ، لأنها تعتمد على عمليات مقارنة السلسلة ، لذلك هذا النمط هو أيضًا شيء لا نتوقعه. بالنظر إلى كل من سلامة النوع وقابلية قراءة البرنامج ، يتم الكشف عن عيوب أنماط التعداد الداخلية والسلسلة. لحسن الحظ ، منذ إصدار Java 1.5 ، تم اقتراح حل بديل آخر يتجنب عيوب أنماط تعداد INT والسلسلة ويوفر العديد من الفوائد الإضافية. هذا هو نوع التعداد. ستقدم الفصول التالية التعريفات والميزات وسيناريوهات التطبيق ومزايا وعيوب أنواع التعداد.
2. التعريف <br /> نوع التعداد يشير إلى نوع قانوني يتكون من مجموعة ثابتة من الثوابت. في Java ، يتم استخدام تعداد الكلمة الرئيسية لتحديد نوع التعداد. فيما يلي تعريف نوع java enum.
موسم التعداد العام {الربيع ، الصيف ، الخريف ، النبيذ ؛} 3. الميزات
عبارات جافا التي تحدد أنواع التعداد بسيطة للغاية. لها الخصائص التالية:
1) استخدم اسم الكلمة الرئيسية 2) اسم النوع ، مثل الموسم 3) سلسلة من القيم المسموح بها ، مثل الربيع والصيف والخريف والشتاء والمواسم المحددة أعلاه 4) يمكن تعريف التعدادات بشكل منفصل في ملف أو مضمن في فصول Java الأخرى.
بالإضافة إلى مثل هذه المتطلبات الأساسية ، لدى المستخدمين بعض الخيارات الأخرى
5) يمكن للتعدادات تنفيذ واجهات واحدة أو أكثر (واجهات) 6) يمكن تعريف المتغيرات الجديدة 7) يمكن تعريف طريقة جديدة 8) يمكن تعريف فئات تختلف وفقًا لقيم التعداد المحددة
4. سيناريوهات التطبيق
أخذ نوع السلامة المذكورة في الخلفية كمثال ، أعد كتابة هذا الرمز بنوع التعداد. الرمز كما يلي:
موسم التعداد العام {Spring (1) ، Summer (2) ، الخريف (3) ، الشتاء (4) ؛ رمز int الخاص ؛ الموسم الخاص (رمز int) {this.code = code ؛ } public int getCode () {return code ؛ }} يستخدم الفئة العامة { / ** * تحويل موسم اللغة الإنجليزية إلى الموسم الصيني * param موسم * @REGANTURN * / public string getChineseSeason (موسم الموسم) {StringBuffer result = new StringBuffer () ؛ Switch (Season) {case Spring: result.append ("[الصينية: الربيع ، التعداد الثابت:" + season.name () + "، البيانات:" + season.getCode () + "]") ؛ استراحة؛ حالة الخريف: result.append ("[الصينية: الخريف ، ثابت التعداد:" + season.name () + "، البيانات:" + season.getCode () + "]") ؛ استراحة؛ حالة الصيف: result.append ("[الصينية: الصيف ، التعداد الثابت:" + season.name () + "، البيانات:" + season.getCode () + "]") ؛ استراحة؛ Case Winter: result.append ("[الصينية: الشتاء ، ثوابت التعداد:" + season.name () + "، البيانات:" + season.getCode () + "]") ؛ استراحة؛ الافتراضي: result.append ("الموسم بدون الأرض" + season.name ()) ؛ استراحة؛ } return result.toString () ؛ } public void dosomething () {for (season s: season.values ()) {system.out.println (getChineseseass (s)) ؛ // هذا سيناريو عادي} //system.out.println(getchineseas (5)) ؛ . useason.dosomething () ؛ }}[الصينية: الربيع ، التعداد الثابت: الربيع ، البيانات: 1] [الصينية: الصيف ، التعداد الثابت: الصيف ، البيانات: 2] [الصينية: الخريف ، ثابت الثابت: الخريف ، البيانات: 3] [الصينية: الشتاء ، ثابت: الشتاء ، البيانات: 4]
إليك سؤال ، لماذا أريد إضافة المجال إلى نوع التعداد؟ والغرض من ذلك هو ربط البيانات مع ثوابتها. على سبيل المثال ، 1 يمثل الربيع و 2 يمثل الصيف.
5. ملخص
إذن متى يجب أن تستخدم التعداد؟ عندما تكون هناك حاجة إلى مجموعة ثابتة من الثوابت ، مثل أيام الأسبوع ، أو مواسم العام ، وما إلى ذلك أو مجموعة من جميع القيم التي تحتوي عليها قبل أن نتجمع. يمكن أن يفي تعداد Java 1.5 بمتطلبات معظم المبرمجين ، وخصائصه الموجزة وسهلة الاستخدام بارزة للغاية.
6. الاستخدام
الاستخدام 1: ثابت
لون التعداد العام {أحمر ، أخضر ، فارغ ، أصفر}الاستخدام 2: التبديل
enum إشارة {الأخضر ، الأصفر ، الأحمر} trafficlight lightlight {signal coll = signal.red ؛ تغيير الفراغ العام () {switch (color) {case red: color = signal.green ؛ استراحة؛ الحالة الأصفر: اللون = signal.red ؛ استراحة؛ Case Green: Color = Signal.yellow ؛ استراحة؛ }}}الاستخدام 3: أضف طريقة جديدة إلى التعداد
ملون التعداد العام {Red ("Red" ، 1) ، Green ("Green" ، 2) ، Blank ("White" ، 3) ، Yello ("Yellow" ، 4) ؛ // عضو متغير السلسلة الخاصة ؛ مؤشر int الخاص ؛ // construct method color (اسم السلسلة ، int index) {this.name = name ؛ this.index = فهرس ؛ }. }} الإرجاع null ؛ } // Get Set method method string getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public int getIndex () {return index ؛ } public void setIndex (int index) {this.index = index ؛ }}الاستخدام 4: طرق للكتابة فوق التعداد
ملون التعداد العام {Red ("Red" ، 1) ، Green ("Green" ، 2) ، Blank ("White" ، 3) ، Yello ("Yellow" ، 4) ؛ // عضو متغير السلسلة الخاصة ؛ مؤشر int الخاص ؛ // construct method color (اسم السلسلة ، int index) {this.name = name ؛ this.index = فهرس ؛ }. }}الاستخدام 5: تنفيذ الواجهة
سلوك الواجهة العامة {void print () ؛ سلسلة getInfo () ؛ } ألوان التعداد العام يطبق السلوك {أحمر ("أحمر" ، 1) ، أخضر ("أخضر" ، 2) ، فارغ ("أبيض" ، 3) ، ييلو ("أصفر" ، 4) ؛ // عضو متغير السلسلة الخاصة ؛ مؤشر int الخاص ؛ // construct method color (اسم السلسلة ، int index) {this.name = name ؛ this.index = فهرس ؛ } // interface method ordride public string getInfo () {return this.name ؛ } // interface methodoverride public void print () {system.out.println (this.index+":"+this.name) ؛ }}الاستخدام 6: استخدم واجهة لتنظيم التعداد
الواجهة العامة طعام {enum Coffee يطبق الطعام {Black_coffee ، decaf_coffee ، latte ، cappuccino} تعداد الحلوى يطبق الطعام {الفاكهة ، الكعكة ، gelato}}ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.