Extensible annotations serait effectivement ajouter le fardeau de la précisant et en maintenant un autre type de système. Et ce serait assez unique type de système, de sorte que vous ne pouvait tout simplement appliquer un OO type de paradigme.
Réfléchir à toutes les questions lors de l'introduction d'polymorphisme et l'héritage d'une annotation (par exemple ce qui arrive quand les sous-annotation des changements de méta-annotation spécifications tels que la rétention?)
Et tout cela ajoute à la complexité de ce cas d'utilisation?
Vous voulez savoir si une annotation appartient à une catégorie?
Essayez ceci:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
Comme vous pouvez le voir, vous pouvez facilement regrouper et de classer les annotations sans trop de douleur en utilisant les installations.
Donc, le BAISER est la raison de ne pas introduire d'une méta-type de système de type pour le langage Java.
[p.s. modifier]
J'ai utilisé de la Corde à des fins de démonstration et en vue d'une fin ouverte méta-annotation. Pour votre propre projet donné, de toute évidence vous pouvez utiliser une énumération des types de catégories et de spécifier plusieurs catégories ("l'héritage multiple") pour une annotation. Notez que les valeurs sont totalement faux et pour des fins de démonstration uniquement:
@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 {
}