لماذا لا يمكن تمديد التعليقات التوضيحية في Java؟


4 Answers

ستضيف التعليقات التوضيحية الموسعة فعليًا عبء تحديد نظام نوع آخر والمحافظة عليه. وسيكون هذا نوعًا فريدًا من نوع النظام ، لذا لا يمكنك ببساطة تطبيق نموذج نوع OO.

فكر في جميع المشكلات عند إدخال تعدد أشكال وتوريث إلى تعليق توضيحي (على سبيل المثال ماذا يحدث عندما يغير التعليق الفرعي مواصفات التعريف التوضيحي مثل الاحتفاظ؟)

وكل هذا التعقيد الإضافي لما هي حالة الاستخدام؟

هل تريد معرفة ما إذا كان التعليق التوضيحي ينتمي إلى فئة ما؟

جرب هذا:

@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
    String category();
}

@Category(category="validator")
public @interface MyFooBarValidator {

}

كما ترى ، يمكنك بسهولة تصنيف التعليقات التوضيحية وتصنيفها بدون ألم غير ضروري باستخدام التسهيلات المقدمة.

لذا ، KISS هو السبب في عدم تقديم نظام نوع من نوع ميتا إلى لغة جافا.

[تحرير]

لقد استخدمت السلسلة لمجرد العرض التوضيحي وفي ضوء تعليق توضيحي مفتوح. بالنسبة لمشروعك الخاص ، من الواضح أنك تستطيع استخدام تعداد لأنواع الفئات وتحديد فئات متعددة ("الوراثة المتعددة") لتعليق توضيحي معين. لاحظ أن القيم زائفة تمامًا ولأغراض العرض فقط:

@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
    AnnotationCategory[] category();
}
public enum AnnotationCategory {
    GENERAL,
    SEMANTICS,
    VALIDATION,
    ETC
}

@Category(category={AnnotationCategory.GENERAL, AnnotationCategory.SEMANTICS})
public @interface FooBarAnnotation {

}
Question

لا أفهم سبب عدم وجود توارث في التعليقات التوضيحية Java ، تمامًا مثل فئات Java. أعتقد أنه سيكون مفيدًا جدًا.

على سبيل المثال: أريد معرفة ما إذا كان التعليق التوضيحي المحدد هو أداة تحقق. مع الميراث ، يمكن أن أتحرك بشكل انعكاسى من خلال الطبقة الفائقة لمعرفة ما إذا كان هذا التعليق التوضيحي يمتد إلى ValidatorAnnotation . على خلاف ذلك ، كيف يمكنني تحقيق ذلك؟

لذا ، هل يمكن لأي أحد أن يعطيني سبباً لقرار التصميم هذا؟




لم أفكر في ذلك ولكن ... يبدو أنك على حق ، لا توجد مشكلة مع مرفق الوراثة التوضيحية (على الأقل أنا لا أرى مشكلة في ذلك).

حول المثال الخاص بك مع التعليق التوضيحي "المدقق" - يمكنك استغلال أسلوب "التعليق التوضيحي" . أي تطبيق ملاحظة تعريفية معينة على واجهة التعليق التوضيحية بالكامل.




نفس المشكلة لدي. لا ، لا يمكنك ذلك. لقد "تأديبت" نفسي لكتابة خصائص في التعليقات التوضيحية لاحترام بعض المعايير ، لذلك بالخارج عندما تحصل على التعليق التوضيحي يمكنك "شم" أي نوع من التعليقات التوضيحية يكون من خلال الخصائص التي يمتلكها.




قد أتأخر ثلاث سنوات في الرد على هذا السؤال ، لكني وجدت أنه مثير للاهتمام لأنني وجدت نفسي في نفس المكان. وهنا هو بلدي على ذلك. يمكنك عرض التعليقات التوضيحية كـ Enums. إنها توفر نوعًا من المعلومات أحادية الاتجاه - أو تستخدمه أو تخسره.

كان لدي موقف حيث أردت محاكاة GET و POST و PUT و DELETE في تطبيق ويب. لقد أردت بشدة الحصول على تعليق توضيحي "فائق" أطلق عليه "HTTP_METHOD". في وقت لاحق بزغ علي أنه لا يهم. حسنًا ، كان عليّ أن أستقر باستخدام حقل مخفي في نموذج HTML لتحديد DELETE و PUT (لأن POST و GET كانوا متوفرين).

على جانب الخادم ، نظرت إلى معلمة مخفية الطلب بالاسم "_method". إذا كانت القيمة PUT أو DELETE ، فقد تجاوزت طريقة طلب HTTP المقترنة. بعد قولي هذا ، لا يهم ما إذا كنت بحاجة إلى توسيع التعليق التوضيحي لإنجاز العمل. بدت جميع التعليقات التوضيحية متشابهة ، ولكن تم التعامل معها بشكل مختلف على جانب الخادم.

لذا في حالتك ، اسقط الحكة لتمديد التعليقات التوضيحية. معاملتهم "علامات". انهم "يمثلون" بعض المعلومات ، وليس بالضرورة "التلاعب" بعض المعلومات.




Related