ما هو التعداد؟
التعداد هي ميزة جديدة قدمها JDK5. في بعض الحالات ، يتم إصلاح كائن فئة ويمكن تعريفه على أنه تعداد. في الاستخدام الفعلي ، يمكن أيضًا استخدام أنواع التعداد كمواصفات لضمان سلامة معلمات البرنامج. التعداد له الخصائص التالية:
java.lang.Enum في Java افتراضيًا ، وينفذ واجهتين: java.lang.Seriablizable و java.lang.Comparable .public static final ، ولا يمكن أن تستمد فئات التعداد غير المنبثقة الفئات الفرعية. هنا equals() في فئة java.lang.Enum :
// هذا يتم تعديله النهائي ، ولا يُسمح للفئات الفرعية بإعادة كتابة منطقية نهائية عامة (كائن آخر) {إرجاع هذا == آخر ؛} الطرق الشائعة للتعداد
int compareTo(E o)
قارن ترتيب هذا التعداد مع الكائن المحدد. عندما يكون الكائن أقل من ، يساوي أو أكبر من الكائن المحدد ، يتم إرجاع الأعداد الصحيحة السلبية أو الصفر أو الأعداد الصحيحة الإيجابية على التوالي. لا يمكن مقارنة ثوابت التعداد إلا مع ثوابت التعداد الأخرى من نفس نوع التعداد.
// رمز المصدر في enum public final int compareto (e o) {enum other = (enum) o ؛ تعداد الذات = هذا ؛ if (self.getClass ()! = other.getClass () && // التحسين self.getDeclaringClass ()! = other.getDeclaringClass ()) رمي classcastexception () ؛ العودة self.ordinal - other.ordinal ؛} String name()
إرجاع اسم مثيل التعداد هذا.
static values()
إرجاع صفيف يحتوي على جميع قيم التعداد التي يمكن استخدامها للتكرار من خلال جميع قيم التعداد.
String toString()
إرجاع اسم مثيل التعداد هذا ، أي قيمة التعداد. نفس name() .
// name () و ToString () في enum public string tostring () {return name ؛} name public final string () {return name ؛} int ordinal()
إرجاع قيمة الفهرس لقيمة التعداد في فئة التعداد (بدءًا من 0) ، أي ترتيب قيمة التعداد في إعلان التعداد ، والذي يعتمد على ترتيب إعلان قيمة التعداد.
<T extends Enum<T>> valueOf()
إرجاع ثابت ثابت لنوع التعداد المحدد مع الاسم المحدد ، يجب أن يتطابق الاسم مع المعرف المستخدم تمامًا لإعلان ثابت التعداد في هذا النوع (لا يُسمح بأحرف مساحة بيضاء إضافية). تتوافق هذه الطريقة مع toString ، لذلك إذا تجاوزنا طريقة toString() ، يجب علينا تجاوز valueOf() طريقة (يمكننا تجاوز toString() ، لكن لا يمكننا تجاوز valueOf() طريقة () عندما نتجاوز طريقة toString() ، valueOf() طريقة إعادة الكتابة تلقائيًا ، ونحن لا نحتاج إلى الانتباه إليها.
تطبيق التعداد
التعداد هو نوع خاص ، واستخدامه يشبه إلى حد كبير استخدام الطبقات العادية.
استبدل مجموعة من الثوابت
لون التعداد العام {أحمر ، أخضر ، فارغ ، أصفر} تستخدم في عبارات التبديل
// Switch أضاف دعمًا لـ ENUM في إشارة jdk1.6 enum {Green ، أصفر ، أحمر} ... Switch (color) {case red: color = signal.green ؛ استراحة؛ } ... أضف طرقًا إلى التعداد
لون التعداد العام {Red ("Red") ، Green ("Green") ، فارغ ("أبيض") ، Yello ("Yellow") ؛ // عضو متغير السلسلة الخاصة ؛ // constructor color (اسم السلسلة) {this.name = name ؛ } // Get Set method method string getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ }} تنفيذ الواجهة
سلوك الواجهة العامة {void print () ؛ } ألوان التعداد العام يطبق السلوك {أحمر ("أحمر" ، 1) ، أخضر ("أخضر" ، 2) ، فارغ ("أبيض" ، 3) ، ييلو ("أصفر" ، 4) ؛ // interface methodoverride public void print () {system.out.println (this.index+":"+this.name) ؛ }} فئة التعداد التي تحتوي على أساليب مجردة
تشغيل التعداد العام {// المستخدمة لأداء عمليات الإضافة بالإضافة إلى {// جزء BRACES هو في الواقع عبارة عن فئة فرعية من الفئة الفرعية الداخلية المجهولة Override Public Double (double x ، double y) {return x + y ؛ }} ، // المستخدمة لأداء عمليات الطرح ناقصًا {// جزء الأقواس هو في الواقع عملية حسابية مزدوجة من فئة فرعية مجهولة المصدر (Double x ، double y) {// todo method method method strend x - y ؛ }} ، // المستخدمة لإجراء عمليات عمليات الضرب {// جزء الأقواس هو في الواقع عملية حسابية مزدوجة Override عامة مجهولة المصدر (double x ، double y) {return x * y ؛ }} ، // المستخدمة لأداء عملية التقسيم قسمة {// جزء الأقواس المجعد هو في الواقع عبارة عن فئة فرعية خارجية مجهول Override Public Double Calculate (double x ، double y) {return x / y ؛ }} ؛ // تحديد طريقة مجردة لفئة التعداد هذه. يجب أن تنفذ جميع قيم التعداد في فئة التعداد هذه الطريقة حساب الملخص العام المزدوج (Double X ، Double Y) ؛} تنفيذ المفردات مع التعدادات (أفضل الممارسات للفرد)
فائدة:
1. استخدم ميزات التعداد لتنفيذ حالات واحدة
2. JVM يضمن سلامة الموضوع
3. تم حل هجمات التسلسل والانعكاس عن طريق التعداد
التعداد العام singleton {مثيل ؛ Singleton Public GetInstance () {// أضف هذه الطريقة للسماح للآخرين بفهم كيفية استخدامها ، لأن طريقة التنفيذ هذه نادرة نسبيًا. مثيل العودة ؛ }} استخدام آخر للتعداد
التعداد
range(E from, E to)
الحصول على مجموعة من مجموعة من قيمة التعداد.
لـ (Daydayenum Day: enumset.range (weekdayenum.mon ، weekdayenum.fri)) {system.out.println (day) ؛ } of(E first, E... rest)
يخلق مجموعة التعداد التي تحتوي في الأصل على العناصر المحددة.
noneOf(Class<E> elementType)
يخلق مجموعة تعداد فارغة مع نوع العنصر المحدد.
enummap
EnumMap(Class<K> keyType)
ينشئ خريطة تعداد فارغة مع نوع المفتاح المحدد.
خريطة <weather ، string> enummap = new enummap <weather ، string> (weather.class) ؛ enummap.put (weather.sunny ، "sunny") ؛ enummap.put (Weather.Rainy ، "Rainy") ؛
التعداد في Android
يحتاج التعداد إلى احتلال كمية كبيرة من الذاكرة. إذا كانت حساسة للذاكرة ، فالرجاء محاولة استخدام ENUM أقل قدر الإمكان واستبدالها بثبات ثابت.
ومع ذلك ، إذا لم تستخدم التعداد ، فستنشأ بعض المخاطر الأمنية ، لذلك أطلق المسؤول تعليقين ، يمكن فحصهم خلال فترة التجميع لاستبدال التعداد. هذان التعليقات التعليقات التوضيحية هما: intdef و stringDef. تقع في ترجمة 'com.android.support:Support-Antations:+'.
مثال على الاستخدام
يتوافق استخدام @TRINGDEF مع intDEF. هنا نأخذ inTDEF كمثال.
الواجهة العامة qrcodeType {int weChat = 0 ؛ int alipay = 1 ؛ intDef ({WeChat ، alipay}) @repinent (attreentionpolicy.source) target ({elementType.field ، elementType.Method ، elementType.Parameter}) interface checker {}} الفئة العامة qrcode public void setType (@qrcodeType.Checker int type) {// define in the parmeter this.type = type ؛ } @qrcodeType.Checker // define في الطريقة (أي ، تحقق من نوع قيمة الإرجاع) public gettype () {return type ؛ }} توصيات للاستخدام
النطاق الأكثر استخدامًا على نطاق واسع في التطوير هو استخدام التعدادات بدلاً من مجموعة من الثوابت الثابتة. في هذه الحالة ، يمكن استخدام طريقة التعليقات التوضيحية أعلاه بدلاً من ذلك.
عندما يحتوي التعداد أيضًا على وظائف أخرى (مثل: بما في ذلك الأساليب المحددة الأخرى) ، لا يمكن استبداله.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون محتوى هذه المقالة من بعض المساعدة لدراستك أو عملك. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل.