جافا التعليقات التوضيحية المخصصة
تعليقات Java هي بعض معلومات التعريف المرفقة بالرمز ، والتي يتم استخدامها لتحليل واستخدام بعض الأدوات أثناء التجميع ووقت التشغيل ، وتعمل كوظائف التفسير والتكوين.
لن تؤثر التعليقات التوضيحية ولا يمكن أن تؤثر على المنطق الفعلي للرمز ، ويلعب دورًا إضافيًا فقط. المدرجة في حزمة java.lang.annotation.
1. ملاحظة ميتا
يشير التعريف إلى شرح التعليقات التوضيحية. بما في ذلك أربعة أنواع: @target document inherited.
1.1. إعادة النظر: حدد استراتيجية الاحتفاظ بالتعليقات التعليقات
repinention (attreentionpolicy.source) // يوجد التعليق التوضيحي فقط في الكود المصدر ولا يحتوي على @entrypolicy.class) // يتم استخدام سياسة الاحتفاظ الافتراضية. سيكون التوضيح موجودًا في ملف Bytecode Class ، ولكن لا يمكن الحصول عليه في وقت التشغيل. @ReateCter (attreentionpolicy.runtime) // سيكون التعليق التوضيحي في ملف Bytecode Class ويمكن الحصول عليه من خلال التفكير في وقت التشغيل.
فئة التعليقات التوضيحية:
reateention (attreentionpolicy.runtime) // سيكون التعليق التوضيحي في ملف الفئة bytecode. يمكن الحصول على target ({elementType.field ، elementtype.method} من خلال التفكير في وقت التشغيل // تحديد هدف التعليق التوضيحي ** نطاق الحقل و remalation statter/method @موثقة // الإشارة false ؛/*** اسم الحقل* regurn*/string name () افتراضي "" ؛/*** هل هو قابل للتحرير* regurn*/boolean reditable () true default ؛/**** ما إذا كان سيتم عرضه في القائمة* @return*/boolean summary () 0 ؛} فئة الكيان:
الفئة العامة anno {fieldmeta (id = true ، name = "number serial" ، order = 1) private int id ؛@felivemeta (name = "name" ، order = 3) name private string ؛@fieldmeta (name = "age" ، order = 2) private int ens ؛ {return id ؛} public void setId (int id) {this.id = id ؛} السلسلة العامة getName () {return name ؛} public void setName (اسم السلسلة) {this.name = name ؛ احصل على فصل المساعدة للتعليق:
الفئة العامة sortablefield {public sortablefield () {} publicablefield (fieldmeta meta ، حقل الحقل) {super () ؛ this.meta = meta ؛ this.field = field ؛ this.name = field.getName () ؛ this.type = field.gettype () ؛ meta ؛ this.name = name ؛ this.type = type ؛} private fieldmeta meta ؛ حقل الحقل الخاص ؛ اسم السلسلة الخاصة ؛ الفئة الخاصة <؟> type ؛ public fieldmeta getMeta () {return meta ؛ getName () {return name ؛} public void setName (اسم السلسلة) {this.name = name ؛} الفئة العامة <؟> gettype () {return type ؛} public void setType (class <؟> type) {this.type = type ؛}} للحصول على التعليقات التوضيحية في وقت التشغيل ، قم أولاً بإنشاء فئة أساسية:
Public Class Parent <T> {private class <T> intity ؛ public parent () {init () ؛}@cumpresswarnings ("uncheced") قائمة عامة <SorableField> init () {list <lorablefield> list = new ArrayList <SlableField> () ؛/** getClass (). (فئة ، واجهة ، نوع بدائي ، أو باطل) *، ثم يحولها إلى المعلمة. . * GetActualTyPearguments () إرجاع مجموعة من كائنات النوع التي تمثل معلمات النوع الفعلي لهذا النوع. * [0] هو الأول في هذه الصفيف. . * باختصار ، هو الحصول على النوع الفعلي من المعلمات العامة للطبقة الفائقة. . */entity = (class <t>) ((parameteristype) this.getClass (). getGenericSuperClass ()). الحقول ، ولكن لا تشمل الحقول الموروثة* entity.getFields () ؛ يعيد فقط جميع الحقول العامة التي يمكن الوصول إليها من الفصل أو الواجهة التي يمثلها الكائن*في الفئة GetDeclared ** () طريقة إرجاع الحقول والأساليب وما إلى ذلك مع جميع أذونات الوصول ؛ * انظر API * */field [] الحقول = entity.getDeclaredFields () ؛ // for (الحقل F: الحقول) {// الحصول على التعليقات التوضيحية التي تحتوي على fieldmeta fieldmeta meta = f.getAntation (fieldmeta.class) ؛ if (meta! = null) جميع الأساليب العامة التي يمكن الوصول إليها للفئة أو الواجهة التي تمثلها طريقة الكائن [] طرق = entity.getMethods () ؛ لـ (الطريقة M: Methods) {fieldmeta meta = m.getAnnotation (fieldmeta.class) ؛ if (meta! = null) {sortablefield sf = new sortablefield (meta ، m.getName () ، m.getReturnType () sorting // collections.sort (list ، new fieldsortcom ()) ؛ collections.sort (قائمة ، مقارن جديد <FortableField> () {OverRidepublic int compare (sortablefield s1 ، sortablefield s2) يمكن أيضًا استخدام المقارنة للمقارنة}}) ؛} قائمة الإرجاع ؛}} قم بإنشاء فئة فرعية لروث الفئة الأساسية:
يمتد طفل الطبقة العامة الوالد <anno> {} فئة الاختبار:
testannotation الفئة العامة {suppressWarnings ({"uncheced" ، "rawtypes"}) public static void main (string [] "+l.getName ()+"/t نوع الحقل: "+l.gettype ()+"/t اسم التعليقات: "+l.getmeta (). name ()+"/T الوصف://///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ) ) )
1. مبدأ العمل في التعليقات التوضيحية:
يوفر JDK5.0 وظائف التعليق التوضيحي ، مما يسمح للمطورين بتحديد واستخدام أنواع التعليقات التوضيحية الخاصة بهم. تتألف هذه الوظيفة من بناء جملة تحدد نوع التعليقات الشراعية وبناء الجملة التي تصف إعلان التعليقات التوضيحية ، واجهة برمجة التطبيقات التي تقرأ التعليقات التوضيحية ، ملف فئة يستخدم التعليق التوضيحي لتعديل ، وأداة معالجة التعليق التوضيحي.
لا يؤثر التعليق التوضيحي بشكل مباشر على دلالات الكود ، ولكن يمكن اعتباره أداة أو مكتبة للبرنامج. سيكون لها بدورها بعض التأثير على دلالات البرنامج.
يمكن قراءة التعليقات التوضيحية بطرق مختلفة من خلال آلية انعكاس أثناء وقت التشغيل.
2. التعليق التوضيحي Override:
Java.lang
تجاوز نوع التعليق
@target (القيمة = الطريقة)
إعادة النظر (القيمة = المصدر)
يعني تجاوز public interface أن إعلان الطريقة يعتزم تجاوز إعلان طريقة أخرى في الطبقة الفائقة. إذا كانت الطريقة تتعلق بنوع التعليق التوضيحي هذا ولكنها لا تتجاوز طريقة الفئة الفائقة ، فإن المترجم يولد رسالة خطأ.
يعني توضيح Override أن الفئة الفرعية تحتاج إلى تجاوز الطريقة المقابلة للفئة الأصل.
التجاوز هو توضيح علامة يستخدم لتحديد التعليق التوضيحي. يمثل اسم الشروح نفسه المعلومات التي سيتم تقديمها لبرنامج الأدوات.
فيما يلي مثال باستخدام التعليق التوضيحي Override:
الفئة A {Private String ID ؛ a (string id) {this.id = id ؛ } Override public string toString () {return id ؛ }}3. التعليق التوضيحي @Deprecated:
Java.lang
نوع التعليق انخفاض
documented
الاحتفاظ (القيمة = وقت التشغيل)
عناصر البرنامج public interface المنخفضة المشروحة بـ @DEPRECATED ، يتم تثبيط المبرمجين من استخدام هذه العناصر ، عادة لأنه خطير أو هناك خيارات أفضل. يحذر المترجم عند استخدام عناصر البرنامج غير المعتمدة أو إجراء إعادة كتابة في التعليمات البرمجية غير الموافق عليها.
لا ينصح طريقة تمثيل التعليق التوضيحي deprecated.
إهمال هو توضيح علامة.
فيما يلي مثال باستخدام التعليق التوضيحي @DePrecated:
الفئة A {Private String ID ؛ a (string id) {this.id = id ؛ } deprecated public void execute () {system.out.println (id) ؛ } public static void main (string [] args) {a a = new a ("a123") ؛ A.Execute () ؛ }}4. التعليق التوضيحي suppresswarnings:
Java.lang
تعليقات التعليقات
target (value = {type ، الحقل ، الطريقة ، المعلمة ، مُنشئ ، local_variable})
إعادة النظر (القيمة = المصدر)
يشير PublicInting interface cumpresswarnings إلى أن تحذير التحويل البرمجي المحدد يجب أن يتم تشغيله في عنصر التعليق (وجميع عناصر البرنامج الواردة في عنصر التعليق هذا). لاحظ أن مجموعة التحذيرات غير المبينة في عنصر معين هي مجموعة من التحذيرات التي يتم غير معطلتها في العنصر. على سبيل المثال ، إذا قمت بتعليق فصل دراسي لإلغاء تحذير وشرح طريقة لإلغاء إظهار تحذير آخر ، فلن يتم إظهار كلا التحذيرين في هذه الطريقة.
اعتمادًا على الأسلوب ، يجب على المبرمجين دائمًا استخدام هذا التعليق التوضيحي على العناصر المتداخلة الأعمق ، وسيعمل فقط إذا تم استخدامه هناك. إذا كنت ترغب في إلغاء إشراك تحذير بطريقة محددة ، فيجب عليك التعليق على الطريقة بدلاً من فصلها.
@suppresswarnings التعليق التوضيحي يشير إلى تحذير القمع.
فيما يلي مثال باستخدام @suppresswarnings شرح:
suppressWarnings ("Unchecked") public static void main (string [] args) {list list = new ArrayList () ؛ list.add ("ABC") ؛}5. التعليقات التوضيحية المخصصة:
عند استخدام interface إلى التعليقات التوضيحية المخصصة ، يتم تلقائيًا إلى واجهة java.lang.annotation.annotation تلقائيًا ، ويتم إكمال التفاصيل الأخرى تلقائيًا بواسطة المترجم. عند تحديد التعليقات التوضيحية ، لا يمكن ورث التعليقات التوضيحية الأخرى أو الواجهات.
تخصيص تعليق أسهل:
public interface myannotation {} استخدم التعليق التوضيحي المخصص: enclude annotationTest2 {myannotation public void execute () {system.out.println ("method") ؛ }} 5.1. أضف المتغيرات:
public interface myannotation {string value1 () ؛} استخدم التعليقات التوضيحية المخصصة: الفئة العامة التعليقات التوضيحية 2 {myannotation (value1 = "abc") public void execute () {system.out.println ("method") ؛ }}عندما يكون اسم السمة المستخدم في التعليق التوضيحي قيمة ، يمكن كتابة واجهة قيمة السمة مباشرة دون تحديد اسم السمة عند تعيينها ؛ باستثناء أسماء المتغيرات غير المتوقعة للقيمة ، يجب تعيين جميع الأسماء المتغيرة باستخدام الاسم = القيمة.
5.2. إضافة القيم الافتراضية:
public interface myannotation {string value1 () الافتراضي "ABC" ؛}5.3. تعداد الاستخدام متعدد المتغيرات:
public interface myannotation {string value1 () الافتراضي "ABC" ؛ myenum value2 () الافتراضي myenum.sunny ؛} enum myenum {مشمس ، ممطر} استخدم التعليقات التوضيحية المخصصة:
الفئة العامة التعليق التوضيحي 2 {myAnnotation (value1 = "a" ، value2 = myenum.sunny) void public execute () {system.out.println ("method") ؛ }} 5.4. متغيرات الصفيف:
public interface myannotation {string [] value1 () الافتراضي "ABC" ؛} استخدم التعليقات التوضيحية المخصصة:
الفئة العامة التعليق التوضيحي 2 {myAnnotation (value1 = {"a" ، "b"}) public void execute () {system.out.println ("method") ؛ }}6. اضبط نطاق التعليق التوضيحي:
documented
الاحتفاظ (القيمة = وقت التشغيل)
@target (value = annotation_type)
يشير الاحتفاظ Public Interface إلى المدة التي يجب الاحتفاظ بتوضيح نوع التعليق التوضيحي. إذا لم يكن هناك تعليق توضيحي للاحتفاظ في إعلان نوع التعليق ، فإن سياسة الاستبقاء تتخلف عن سدادات attreencepolicy.class.
تكون تعليقات التعريف المستهدفة صالحة فقط عندما يتم استخدام نوع تعليق التعليق مباشرة للتعليقات. إذا تم استخدام نوع تعليق التعليق كعضو في نوع تعليق آخر ، فهو غير صالح.
التعداد العام الاحتفاظ بها
يمتد التعداد <StrentingPolicy> سياسة الاحتفاظ بالتعليقات. تصف ثوابت هذا النوع من التعداد الاستراتيجيات المختلفة للحفاظ على التعليقات. يتم استخدامها مع أنواع التعليقات الوصفية للاحتفاظ لتحديد المدة التي يتم الاحتفاظ بها.
فصل
سيقوم برنامج التحويل البرمجي بتسجيل التعليقات في ملف الفصل ، لكن VM لا يحتاج إلى الاحتفاظ بالتعليقات في وقت التشغيل.
وقت التشغيل
سيقوم برنامج التحويل البرمجي بتسجيل التعليقات في ملف الفصل ، وسيحتفظ VM بالتعليقات في وقت التشغيل ، بحيث يمكن قراءتها بشكل عكسي.
مصدر
تعليقات لتجاهل المترجم. يمكن أن يوفر التعليق التوضيحي للاحتفاظ سياسة الاحتفاظ بالتعليقات للمترجمين عند تحديد التعليقات التوضيحية.
التعليقات التوضيحية التي تنتمي إلى سياسة الاحتفاظ بالصف هي suppressWarnings ، والتي لن يتم تخزينها في ملف .class.
6.1. أمثلة على الاستخدام في التعليقات التوضيحية المخصصة:
@repinent (attreentionpolicy.class) public interface myannotation {string [] value1 () الافتراضي "ABC" ؛}7. مثال على استخدام الانعكاس لقراءة معلومات التعليق التوضيحي لسياسة الاحتفاظ في وقت التشغيل:
java.lang.reflect
واجهة مشروح
جميع فئات التنفيذ المعروفة:
تمثل AccessibleObject ، فئة ، مُنشئ ، حقل ، طريقة ، حزمة عنصرًا معتمدًا من البرنامج الذي يعمل حاليًا في هذا VM. تتيح هذه الواجهة قراءة انعكاسية للتعليقات. جميع التعليقات التي تم إرجاعها بالطرق في هذه الواجهة غير قابلة للتسلسل. يمكن للمتصل تعديل الصفيف الذي تم إرجاعه بواسطة ملحق المصفوفة المعينة التي تم تعدادها ؛ لن يكون لهذا أي تأثير على الصفيف الذي تم إرجاعه من قبل المتصلين الآخرين.
إذا أدت طريقة في هذه الواجهة إلى إرجاع تعليق (بشكل مباشر أو غير مباشر) يحتوي على عضو فئة مخصص يشير إلى فئة لا يمكن الوصول إليها في هذا VM ، فإن محاولة قراءة الفصل من خلال استدعاء الطريقة التي يتم إرجاعها من قبل الفئة ذات الصلة على التعليق الذي تم إرجاعه سيؤدي إلى وجود typenotpresentexception.
isannotationpresent
Boolean isannotationpresent (فئة <؟ يمتد التعليق التوضيحي> التعليق التوضيحي) يعيد صحيحًا إذا كان التعليق للنوع المحدد موجودًا على هذا العنصر ، وإلا يرجع خطأ. تم تصميم هذه الطريقة بشكل أساسي لتسهيل الوصول إلى تعليقات العلامات.
المعلمة:
التعليق التوضيحي - كائن فئة يتوافق مع نوع التعليق التوضيحي
يعود:
إرجاع صحيح إذا كان التعليق على نوع التعليق المحدد موجودًا على هذا الكائن ، وإلا خطأ
يرمي:
nullpointerxception - إذا كانت فئة التعليقات التوضيحية المعينة لاغية
ابدأ بالإصدار التالي:
1.5
getAnnotation
<T يمتد التعليق التوضيحي> t getAnnotation (الفئة <T> enrotationClass) إرجاع هذه التعليقات إذا كانت هناك تعليقات على النوع المحدد لهذا العنصر ، وإلا يتم إرجاع فارغ.
المعلمة:
التعليق التوضيحي - كائن فئة يتوافق مع نوع التعليق التوضيحي
يعود:
إذا كانت تعليقات التعليق المحدد للعنصر موجودًا على هذا الكائن ، فسيتم إرجاع هذه التعليقات ، وإلا فريدة
يرمي:
nullpointerxception - إذا كانت فئة التعليقات التوضيحية المعينة لاغية
ابدأ بالإصدار التالي:
1.5
getAnnotations
التعليقات التوضيحية [] GetAnnotations () إرجاع جميع التعليقات الموجودة على هذا العنصر. (إذا لم يتم التعليق على هذا العنصر ، يتم إرجاع مجموعة من الطول صفر.) يمكن للمتصل للطريقة تعديل الصفيف الذي تم إرجاعه في الإرادة ؛ لن يكون لهذا أي تأثير على الصفيف الذي تم إرجاعه من قبل المتصلين الآخرين.
يعود:
جميع التعليقات الموجودة على هذا العنصر
ابدأ بالإصدار التالي:
1.5
getDeclaredannotations
التعليقات التوضيحية [] GetDeclaredAnnotations () إرجاع جميع التعليقات الموجودة مباشرة على هذا العنصر. على عكس الطرق الأخرى في هذه الواجهة ، تتجاهل هذه الطريقة التعليقات التوضيحية الموروثة. (إذا لم يكن هناك تعليق مباشرة على هذا العنصر ، يتم إرجاع مجموعة من الطول صفر.) يمكن للمتصل بالطريقة تعديل الصفيف الذي تم إرجاعه في الإرادة ؛ لن يكون لهذا أي تأثير على الصفيف الذي تم إرجاعه من قبل المتصلين الآخرين.
يعود:
جميع التعليقات الموجودة مباشرة على هذا العنصر
ابدأ بالإصدار التالي:
1.5
فيما يلي مثال على استخدام الانعكاس لقراءة معلومات التعليق التوضيحي لسياسة الاحتفاظ بوقت التشغيل:
التعليقات التوضيحية المخصصة:
reateention (attreentionpolicy.runtime) public interface myannotation {string [] value1 () الافتراضي "ABC" ؛} استخدم التعليقات التوضيحية المخصصة:
الفئة العامة التعليقات التوضيحية 2 {myAnnotation (value1 = {"a" ، "b"}) deprecated public void execute () {system.out.println ("method") ؛ }} اقرأ المعلومات في التعليق التوضيحي:
الفراغ الثابت العام (سلسلة [] args) يلقي SecurityException ، nosuchmethodexception ، alfictalargumentException ، غير unalfalAccessException ، invocationTargetException {enrotationTest2 enrotationTest2 = annotationTest2 () جديد ؛ // getClass مثيل من enrotationTest2Class <EnctationTest2> c = annotationTest2.class ؛ // getMethodinstance طريقة طريقة = c.getMethod ("تنفيذ" ، فئة جديدة [] {}) ؛ // تحديد ما إذا كانت الطريقة تحتوي على شرح myannotation إذا (method.isannotationpresent (myannotation.class)) {// الحصول على مثيل شرح myannotation لهذه الطريقة myannotation myannotation = method.getAnnotation (myannotation.class) ؛ // تنفيذ طريقة method.invoke (annotationTest2 ، كائن جديد [] {}) ؛ // الحصول على سلسلة myannotation [] value1 = myannotation.value1 () ؛ System.out.println (value1 [0]) ؛ } // احصل على جميع التعليقات التوضيحية على التعليقات التوضيحية للأسلوب [] التعليقات التوضيحية = method.getAnnotations () ؛ لـ (التعليق التوضيحي: التعليقات التوضيحية) {system.out.println (التعليق التوضيحي) ؛ }}8. استخدام التعليقات التوضيحية المحدودة:
التعليقات التوضيحية المحدودة استخدام @target.
documented
الاحتفاظ (القيمة = وقت التشغيل)
@target (value = annotation_type)
يشير الهدف العام interface إلى نوع عناصر البرنامج التي ينطبق عليها نوع التعليقات التوضيحية. إذا لم يكن تعليق التعريف المستهدف موجودًا في إعلان نوع التعليق ، فيمكن استخدام النوع المعلن في أي عنصر برنامج. في حالة وجود هذا التعليق الوصفي ، يفرض المترجم حد الاستخدام المحدد. على سبيل المثال ، يشير تعليق التعريف هذا إلى أن نوع الإعلان هو نفسه ، أي نوع التعليق الوصفي. لا يمكن استخدامه إلا في إعلانات نوع التعليق:
target (elementType.annotation_type) public interface metaannotationType {...} يشير تعليق التعريف هذا إلى أنه لا يمكن استخدام نوع الإعلان إلا كنوع أعضاء في إعلانات نوع التعليقات التوضيحية المعقدة. لا يمكن استخدامه مباشرة للتعليقات:
target ({}) public interface memberType {...} هذا خطأ في وقت الترجمة يشير إلى أن ثابت elementType يظهر أكثر من مرة في التعليق الهدف. على سبيل المثال ، تعتبر تعليقات التعريف التالية غير قانونية:
target ({elementType.field ، elementtype.method ، elementType.field}) public interface bogus {...} elementType public}يمتد نوع عنصر البرنامج <elementType>. توفر ثوابت نوع التعداد هذا تصنيفًا بسيطًا للعناصر المعلنة في برنامج Java.
يتم استخدام هذه الثوابت مع نوع تعليق التعليق المستهدف لتحديدها في ظل الظروف ، من القانوني استخدام نوع التعليق.
التعليق التوضيحي
إعلان نوع التعليق
مُنشئ
بيان طريقة المنشئ
مجال
إعلان ميداني (بما في ذلك ثوابت التعداد)
local_variable
إعلان متغير محلي
طريقة
بيان الطريقة
طَرد
بيان الحزمة
المعلمة
إعلان المعلمة
يكتب
الفصل ، واجهة (بما في ذلك أنواع التعليقات) أو إعلان التعداد
أمثلة على القيود على استخدام التعليقات التوضيحية:
target (elementType.method) public interface myannotation {string [] value1 () الافتراضي "ABC" ؛}9. أضف ملاحظات إلى وثيقة المساعدة:
لإضافة معلومات التعليق التوضيحي إلى ملف API أثناء إنشاء ملف Javadoc ، يمكنك استخدام java.lang.annotation.documented.
إعلان وثيقة التعليق التوضيحي للبناء في شرح مخصص:
documentedPublicPublic interface myannotation {string [] value1 () الافتراضي "ABC" ؛} استخدم التعليقات التوضيحية المخصصة:
الفئة العامة التعليق التوضيحي 2 {myAnnotation (value1 = {"a" ، "b"}) public void execute () {system.out.println ("method") ؛ }}10. استخدم الميراث في التعليقات التوضيحية:
بشكل افتراضي ، لا يتم توريث التعليقات التوضيحية إلى فئات فرعية. يمكنك إضافة إعلان التعليقات التوضيحية java.lang.annotation.inherited عند استخدام التعليقات التوضيحية المخصصة.
documented
الاحتفاظ (القيمة = وقت التشغيل)
@target (value = annotation_type)
تشير الوفرة العامة الموروثة إلى أن نوع التعليقات التوضيحية ورث تلقائيًا. إذا كان هناك شرح ميتا ورث في إعلان نوع التعليق ، ويقوم المستخدم بتعليق نوع التعليق في إعلان الفصل ، وليس هناك أي تعليق على هذا النوع في إعلان الفصل ، سيتم الاستعلام عن نوع التعليق تلقائيًا في الفئة الفائقة للفئة. يتم تكرار هذه العملية حتى يتم العثور على هذا النوع من التعليقات أو يتم الوصول إلى المستوى العلوي من التسلسل الهرمي للفصل. إذا لم يكن لدى الفئة الفائقة شرحًا توضيحيًا من هذا النوع ، فسيشير الاستعلام إلى أن الفئة الحالية لا تحتوي على مثل هذا التعليق التوضيحي.
لاحظ أنه إذا كنت تستخدم نوع التعليقات التوضيحية للتعليق على أي شيء آخر غير الفصل ، فإن نوع التعليق الوطني هذا غير صالح. لاحظ أيضًا أن هذا التعليق الوطني يسهل فقط ميراث التعليقات من الفئات الفائقة ؛ من غير الصحيح أن تعليقات على الواجهات المنفذة.
يتحدث المقالة أعلاه لفترة وجيزة عن التعليقات التوضيحية المخصصة لـ Java واستخدام التأمل للحصول على التعليقات التوضيحية أثناء وقت التشغيل هو كل المحتوى الذي أشاركه معك. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.