1. الشرح الأكثر شيوعا
•@Override: يُستخدم في الطرق لإخبار الآخرين أن هذه الطريقة تتجاوز الفئة الأصلية
•@مهمل: من المستحسن عدم استخدام الآخرين لواجهة برمجة التطبيقات القديمة. ستؤدي إلى إنشاء رسالة تحذير أثناء التجميع ويمكن ضبطها على كافة العناصر في البرنامج.
•@SuppressWarnings: قم بإيقاف تشغيل بعض رسائل التحذير مؤقتًا
•@Entity: يشير إلى أن هذه الفئة هي فئة مستمرة
2. تصميم تعليق توضيحي خاص بك
اقرأ الكود أولاً قبل التحدث
1. تنفيذ التعليق التوضيحي بمعلمة واحدة فقط
انسخ رمز الكود كما يلي:
الحزمة chb.test.annotation؛
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@الاحتفاظ(RetentionPolicy.RUNTIME)
@موثقة
@interface MyAnnotation1 {
قيمة السلسلة ()؛
}
2. تنفيذ التعليق التوضيحي بمعلمتين
انسخ رمز الكود كما يلي:
الحزمة chb.test.annotation؛
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@الاحتفاظ(RetentionPolicy.RUNTIME)
@موثقة
@interface MyAnnotation2 {
وصف السلسلة ()؛
boolean isAnnotation();
}
3. شرح الطبقة التجريبية
انسخ رمز الكود كما يلي:
الحزمة chb.test.annotation؛
@MyAnnotation1("هذا هو التعليق التوضيحي1")
عرض توضيحي للفئة العامة {
@MyAnnotation2(الوصف = "هذا هو التعليق التوضيحي 2"، هو التعليق التوضيحي = صحيح)
الفراغ العام يقول مرحبا () {
System.out.println("مرحبا بالعالم!");
}
}
4. فئة وصف اختبار التعليق التوضيحي
انسخ رمز الكود كما يلي:
الحزمة chb.test.annotation؛
import java.lang.reflect.Method;
import org.junit.Test;
التعليق التوضيحي للطبقة العامة {
@امتحان
اختبار الفراغ العام () يطرح ClassNotFoundException، SecurityException، NoSuchMethodException {
Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
علامة منطقية = cls.isAnnotationPresent(MyAnnotation1.class);
إذا (العلم) {
System.out.println("الحكم على الفصل ليكون تعليقًا توضيحيًا");
MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
System.out.println(annotation1.value());
}
طريقة الطريقة = cls.getMethod("sayHello");
flag =method.isAnnotationPresent(MyAnnotation2.class);
إذا (العلم) {
System.out.println("طريقة الحكم هي أيضًا تعليق توضيحي");
MyAnnotation2 annotation2 =method.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());
}
}
}
نتيجة للتجربة، تقوم وحدة التحكم بإخراج المعلومات التالية:
تحديد ما إذا كان الفصل عبارة عن تعليق توضيحي
هذا هو التعليق التوضيحي1
طريقة الحكم هي أيضا شرح
هذا هو التعليق التوضيحي 2 صحيح
3. المقدمة والشرح
1. @Target(ElementType.TYPE) في MyAnnotation1
يتم استخدام ElementType في @Target لتحديد العناصر التي يمكن استخدام نوع التعليق التوضيحي عليها، على سبيل المثال:
TYPE (نوع)، FIELD (سمة)، METHOD (طريقة)، PARAMETER (معلمة)، CONSTRUCTOR (منشئ)، LOCAL_VARIABLE (متغير محلي)، PACKAGE (حزمة)، حيث يشير TYPE (type) إلى النوع الذي يمكن استخدامه في أنواع الفئة والواجهة والتعداد والتعليقات التوضيحية.
2. @Retention(RetentionPolicy.RUNTIME) في MyAnnotation1
سياسة الاحتفاظ لديها ثلاث استراتيجيات، وهي:
•المصدر: سيتم الاحتفاظ بمعلومات نوع التعليق التوضيحي هذه فقط في الكود المصدري للبرنامج إذا تم تجميع الكود المصدري، فستختفي بيانات التعليق التوضيحي ولن يتم الاحتفاظ بها في ملف .class المترجم.
•CLASS: يتم الاحتفاظ بمعلومات نوع التعليق التوضيحي في الكود المصدري للبرنامج وأيضًا في ملف .class المترجم أثناء التنفيذ، ولن يتم تحميل هذه المعلومات في JVM. ملاحظة: الإستراتيجية الافتراضية هي نوع CLASS
•RUNTIME: يشير إلى أنه تم الاحتفاظ بالمعلومات في التعليمات البرمجية المصدر وملفات .class المجمعة، وسيتم تحميل هذه المعلومات في JVM أثناء التنفيذ.
3. @ موثق في MyAnnotation1
والغرض من ذلك هو عرض معلومات التعليق التوضيحي هذه في مستند JAVA API. إذا لم تتم إضافة @Documented، فلن يتم عرض معلومات التعليق التوضيحي ذات الصلة في مستند JAVA API.
4. @ الواجهة في MyAnnotation1
الكلمة الأساسية، تشير إلى أن الفئة محددة للتعليق التوضيحي
5. قيمة السلسلة () في MyAnnotation1؛
يشير إلى وجود معلمة عضو بقيمة الاسم وحق الوصول كمعدل افتراضي. لاحظ النقطتين التاليتين:
• لا يمكن تعديل حقوق الوصول إلا باستخدام عام وافتراضي (افتراضي)
• يمكن لأعضاء المعلمة فقط استخدام أنواع البيانات الأساسية الثمانية وهي بايت، وقصير، وchar، وint، وطويل، وfloat، ومزدوج، وboolean، وأنواع البيانات مثل String، وEnum، وClass، والتعليقات التوضيحية، والمصفوفات من هذه الأنواع
6.@MyAnnotation1("هذا هو التعليق التوضيحي1") في AnnotationDemo
نظرًا لأن MyAnnotation1 يحتوي على معلمة واحدة فقط، يمكنك كتابة القيمة مباشرة بين قوسين. ملاحظة: إذا كان التعليق التوضيحي يحتوي على معلمة واحدة فقط، فمن المستحسن أن يتم تعريف اسم المعلمة كقيمة
7.cls.isAnnotationPresent(MyAnnotation1.class) في TestAnnotation
تحديد ما إذا كان الفصل يستخدم التعليق التوضيحي لـ MyAnnotation1
8. MyAnnotation1 في TestAnnotation annotation1 = cls.getAnnotation(MyAnnotation1.class)
إرجاع التعليق التوضيحي لهذه الفئة لـ MyAnnotation1
9.method.isAnnotationPresent(MyAnnotation2.class) في TestAnnotation
تحديد ما إذا كانت الطريقة تستخدم التعليق التوضيحي لـ MyAnnotation2