Расширяемые аннотации эффективно добавили бы бремя определения и поддержки другой системы типов. И это будет довольно уникальная система типов, поэтому вы не сможете просто применить парадигму типа ОО.
Продумайте все вопросы, когда вы вводите полиморфизм и наследование в аннотацию (например, что происходит, когда поданнотация изменяет спецификации метааннотации, такие как сохранение?)
И все это добавляет сложности для какого варианта использования?
Вы хотите знать, относится ли данная аннотация к категории?
Попробуй это:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
Как вы можете видеть, вы можете легко группировать и классифицировать аннотации без лишних усилий, используя предоставленные средства.
Итак, поцелуй является причиной отказа от введения системы типов мета-типов в язык Java.
[ps edit]
Я использовал String просто для демонстрации и ввиду открытой метааннотации. Для вашего собственного данного проекта вы, очевидно, можете использовать перечисление типов категорий и указать несколько категорий («множественное наследование») для данной аннотации. Обратите внимание, что значения являются полностью поддельными и только для демонстрационных целей:
@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
хотя этот факт явно не объявлен.