ملخص
قدمت Java التعليق التوضيحي في الإصدار 1.5 ، والمعروف أيضًا باسم Java anotation. التعليق التوضيحي هو نوع من بيانات تعريف بناء الجملة التي يمكن استخدامها مباشرة في الكود المصدر ، ويمكن شرح الفئات/الأساليب/المتغيرات/المعلمات/الأسماء ، وما إلى ذلك. على عكس علامات Javadoc ، يمكن للمترجم الاحتفاظ برمز التعليقات التوضيحية عند إنشاء ملف الفئة. في الوقت نفسه ، من أجل استخدام التعليقات التوضيحية أثناء عملية وقت التشغيل ، يحتفظ جهاز Java الظاهري بالشرح ، بحيث يمكن الحصول على المعلومات ذات الصلة حول التعليقات التوضيحية من خلال التفكير.
التعليقات التوضيحية المدمجة
في الواقع ، نواجه في كثير من الأحيان تعليقات توضيحية ، مثل Override و @DePrecated ، وما إلى ذلك. هذه كلها تعليقات مضمنة في JDK. دعونا أولاً نلقي نظرة على ما هي التعليقات التوضيحية الرئيسية المدمجة في جافا.
• التعليقات التوضيحية التي تعمل على كود جافا
◦@التجاوز يتحقق مما إذا كانت الطريقة هي طريقة إعادة كتابة. إذا لم يتم العثور على هذه الطريقة في الفئة الأصل أو الواجهة التي تم تنفيذها ، فسيحدث خطأ في التجميع.
◦@علامات إهمال تتجاهلها طريقة أو فئة. إذا تم استخدام الفصل أو الطريقة ، فإن عملية التجميع ستنبهك.
◦@cumpresswarnings إخطار المترجم بتجاهل التحذيرات حول المعلمات المشروحة
◦@safevarargs يتجاهل تحذيرات حول أساليب الاتصال أو المُنشئين التي تحتوي
◦@FunctionalInterface يشير إلى أنه سيتم استخدام واجهة معلنة كواجهة وظيفية. 1.8 أضاف التعليق التوضيحي
• تسمى التعليقات التوضيحية التي تم إجراؤها على التعليقات التوضيحية الأخرى التعليقات التوضيحية (التعليقات التوضيحية)
◦@يحدد الاستبقاء عند استخدام التعليق التوضيحي المشروح (أي عندما يتم الاحتفاظ بالتعليقات التوضيحية)
■ الاحتفاظ في رمز المصدر فقط وتجاهله أثناء التجميع (strentionPolicy.Runtime)
■ يتم حفظ التعليقات التوضيحية في ملف الفصل أثناء التجميع ، ويتم تجاهله عند تحميل ملف الفصل (attreencepolicy.class)
■ تتم قراءة التعليقات التوضيحية عند تحميل ملف الفصل ، أي أن التعليقات التوضيحية متوفرة أثناء التشغيل. يمكن الحصول على التعليقات التوضيحية من خلال التفكير (attreencepolicy.runtime)
يشير التوثيق@الموثق إلى أنه عند توليد Javadoc ، سيتم كتابة التعليقات التوضيحية المشروحة إلى وثيقة Javadoc.
◦@الهدف يحدد نطاق التعليق التوضيحي المشروح ■ elementType.type: يستخدم لوصف الفصل ، واجهة (بما في ذلك نوع التعليق التوضيحي) أو إعلان التعداد ■ elementType.Field: استخدامه لوصف المعلمة ■ elementType. مُنشئ ■ elementType.local_variable: يستخدم لوصف المتغير المحلي ■ elementType.annotation_type: يستخدم لوصف التعليقات التوضيحية ■ elementType.package: يستخدم لوصف الحزمة
◦ @الموروثة تشير إلى أن التعليق التوضيحي موروثة ، أي إذا تم استخدام نوع التعليق التوضيحي المعدل بواسطة inherited لفئة ، فإن التعليق التوضيحي سيعمل أيضًا على الفئة الفرعية للفئة المعدلة.
◦@تشير@القابلة للتكرار إلى أنه يمكن تطبيق التعليق التوضيحي المشروح على نفس الكائن عدة مرات. 1.9 أضاف التعليق التوضيحي
التعليقات التوضيحية المخصصة
لقد ذكرت الكثير من التعليقات التوضيحية أعلاه ، ويركز الجميع على التعليقات التوضيحية. عندما نقوم بتخصيص التعليقات التوضيحية ، نستخدم عادة التعليقات التوضيحية لمساعدتنا. تنسيق التعليقات التوضيحية المخصصة هو اسم التعليق التوضيحي العام {تعريف تعريف التعريف}. عند استخدام Enterface Custom Strentation ، يتم تلقائيًا إلى واجهة java.lang.annotation.annotation تلقائيًا. عند تخصيص التعليقات التوضيحية ، لا يمكن ورث التعليقات التوضيحية الأخرى أو الواجهات. الطريقة المعلنة في التعليقات التوضيحية هي في الواقع معلمة تعليق. اسم الطريقة هو اسم المعلمة ، ونوع قيمة الإرجاع هو نوع المعلمة. يمكن إعلان القيمة الافتراضية للمعلمة من خلال الافتراضي.
التعليقات التوضيحية المخصصة بسيطة ، استخدم interface لتحديد التعليق التوضيحي ، على النحو التالي.
retention (attreentionpolicy.runtime) target (elementType.type) documentedPublicPublic1 interface classInfo {String upluder () افتراضي "wang" ؛ تاريخ السلسلة () ؛ تعليقات السلسلة () ؛} تعليق مخصص يسمى classInfo. وفقًا لـ @الاحتفاظ ، يمكنك أن تعرف أن هذا التعليق التوضيحي سيكون موجودًا دائمًا ، أي أن هذا التعليق التوضيحي لا يزال صالحًا عند تشغيل البرنامج ؛ Target (elementType.type) يعني أن شرح ClassInfo يعمل على الفصل أو الواجهة أو إعلان التعداد ؛ documented
تعليمات يمكن كتابة معلومات ClassInfo في مستندات Javadoc.
دعنا نلقي نظرة على بعض معلمات التعليقات التوضيحية في التعليقات التوضيحية المخصصة. هناك ثلاثة معلمات شرح. يمكن تعيين معلمات التعليقات التوضيحية افتراضيًا ، مثل معلمة تعليق المؤلف ، والقيمة الافتراضية هي Wang ، والمعلمتين الأخريين ليس لهما قيم افتراضية.
دعونا نلقي نظرة على شرح مخصص آخر.
repention (attreentionpolicy.runtime) target (elementType.method) public interface methodInfo {string description () الافتراضي "no description" ؛ تاريخ السلسلة () ؛}يعمل MethodInfo التعليقات المخصصة هذا على الطريقة ، وسيكون هذا التعليق التوضيحي أيضًا عند تشغيل البرنامج ؛ هناك نوعان من معلمات التعليقات التوضيحية في ذلك.
للتعليق على تعريف المعلمات (تعريف الطريقة) ، يمكنك فقط استخدام معدلات حقوق الوصول العامة أو الافتراضي. تدعم أنواع المعلمات الأنواع التالية.
• ثمانية أنواع بيانات أساسية (بايت ، int ، قصيرة ، طويلة ، تعويم ، مزدوج ، شار ، منطقية)
• نوع السلسلة
• نوع الفصل
• نوع التعداد
• نوع التعليقات التوضيحية
• صفائف من جميع الأنواع أعلاه
استخدام التعليقات التوضيحية
بالإضافة إلى التعليقات التعليقات المذكورة أعلاه ، تمت إضافة شرح مع نطاق ميداني.
reateention (attreentionpolicy.runtime) target (elementType.field) public interface fieldInfo {string type () ؛ اسم السلسلة () ؛}إذا لم يتم الإعلان عن القيم الافتراضية في التعليقات التوضيحية المخصصة ، فيجب تعيين هذه المعلمات قيمًا عند استخدام التعليقات التوضيحية المخصصة ، وإلا فإن المترجم سيبلغ عن خطأ.
ألقِ نظرة على الكود الذي يستخدمه التعليق التوضيحي:
ClassInfo (effect = "wang" ، date = "2016/9/13" ، Comments = "EnoTation Demo") annotationDemo {FieldInfo (type = "public" ، name = "firstfield) public int firstfield ؛ @feelfinfo (type = "private" ، name = "secondfield") private String Secondfield ؛ methodinfo (description = "method in enrotationDemo" ، name = "firstmethod") public void firstmethod (string value) {system.out.printf ( } methodinfo (description = "method in enrotationDemo" ، name = "SecondMethod") private void secondMethod () {system.out.printf ( }}احصل على معلومات التعليقات التوضيحية
للحصول على معلومات التعليقات التوضيحية ، يجب علينا أولاً التأكد من وجود التعليق التوضيحي أثناء تشغيل البرنامج. لذلك ، نضيف عمومًا الاحتفاظ (attreencepolicy.runtime) التعليق التوضيحي إلى التعليقات التوضيحية المخصصة. وبهذه الطريقة ، أثناء تشغيل البرنامج ، يمكننا الحصول على بعض معلومات التعليقات التوضيحية من خلال التفكير. للحصول على تعليمات حول التفكير ، يمكنك عرض هذه المقالة.
include include include {public static void main (string [] args) {solveClassAnnotationInfo (annotationDemo.Class) ؛ solvefieldannotationInfo (annotationDemo.Class) ؛ SELSOLVEMETHODANNOTATININFO (annotationDemo.Class) ؛ } خاصًا ثابتًا في الفراغ الفراغ الثابتة (class <؟> clz) {// تحديد ما إذا كانت هذه الفئة لديها شرح classinfo if (clz.isannotationpresent (classInfo.class)) system.out.println (classInfo.Author () + "" + classInfo.comments () + "" + classInfo.date ()) ؛ }} private static void solveFieldAntationInfo (class <؟> clz) {field [] fields = clz.getDeclaredFields () ؛ لـ (الحقل الحقل: الحقول) {if (field.isannotationpresent (fieldInfo.Class)) {fieldInfo fieldInfo = (fieldInfo) field.getAnnotation (fieldInfo.class) ؛ system.out.println (fieldInfo.type () + "" + fieldInfo.name ()) ؛ }}} sensolvemethodannotationinfo (class <؟> clz) {method [] method = clz.getDeclaredMethods () ؛ من أجل (الطريقة الطريقة: الأساليب) {if (method.isannotationpresent (methodInfo.class)) {methodInfo methodInfo = (methodInfo) method.getAnnotation (methodInfo.class) ؛ System.out.println (methodInfo.name () + "" + methodInfo.description ()) ؛ }}}}انعكاس للحصول على الحقل/الطريقة في الفصل ، وما إلى ذلك ، والحصول على التعليقات التوضيحية ذات الصلة من خلال getAnnotation () أو getAnnotations (). يمكنك الحصول على معلومات محددة عن طريق الحصول على التعليقات التوضيحية المحددة.
ناتج نتيجة التشغيل على النحو التالي:
الشكل 1 عملية التشغيل الرسم البياني
لخص
بالنسبة للمبتدئين في Java وحتى مطوري Java مع خبرة معينة ، قد يكون لديهم تعرض أقل لشروح Java. في الواقع ، نادراً ما يتم استخدام التعليقات التوضيحية ، لكنهم سيراهم غالبًا في الكود. هذه المقالة هي مقدمة بسيطة للشروح ، وعلى الأقل على مستوى الكود ، من الخالية من الإجهاد القراءة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.