एक्स्टेंसिबल एनोटेशन प्रभावी रूप से एक अन्य प्रकार की प्रणाली को निर्दिष्ट और मुख्य करने का बोझ जोड़ देगा। और यह एक बहुत ही अनोखी प्रकार की प्रणाली होगी, इसलिए आप केवल OO प्रकार का प्रतिमान लागू नहीं कर सकते हैं।
उन सभी मुद्दों पर विचार करें, जब आप एक व्याख्या में बहुरूपता और विरासत का परिचय देते हैं (जैसे कि क्या होता है जब उप-एनोटेशन मेटा-एनोटेशन चश्मा जैसे प्रतिधारण बदल जाता है?)
और यह सब क्या उपयोग-मामले के लिए जटिलता जोड़ा गया?
आप जानना चाहते हैं कि क्या दिया गया एनोटेशन किसी श्रेणी का है?
इसे इस्तेमाल करे:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
जैसा कि आप देख सकते हैं, आप उपलब्ध सुविधाओं का उपयोग करके आसानी से बिना दर्द के एनोटेशन को समूह और वर्गीकृत कर सकते हैं।
तो, KISS जावा भाषा पर एक मेटा-प्रकार प्रकार प्रणाली शुरू नहीं करने के लिए कारण है।
[ps edit]
मैंने स्ट्रिंग का उपयोग केवल प्रदर्शन के लिए किया और एक खुले अंत मेटा एनोटेशन के मद्देनजर। अपनी स्वयं की दी गई परियोजना के लिए, आप स्पष्ट रूप से श्रेणी प्रकारों का उपयोग कर सकते हैं और दिए गए एनोटेशन के लिए कई श्रेणियां ("कई विरासत") निर्दिष्ट कर सकते हैं। ध्यान दें कि मान पूरी तरह से फर्जी हैं और केवल प्रदर्शन उद्देश्यों के लिए हैं:
@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 {
}
java.lang.annotation.Annotation
, अर्थात कोई भी एनोटेशनinstanceof
यह है, हालांकि यह तथ्य स्पष्ट रूप से घोषित नहीं किया गया है।