Las anotaciones extensibles agregarían efectivamente la carga de especificar y mantener otro tipo de sistema. Y este sería un sistema de tipo bastante único, por lo que no podría simplemente aplicar un paradigma tipo OO.
pensar en todas las cuestiones cuando se introduce el polimorfismo y la herencia a una anotación (por ejemplo, lo que ocurre cuando sub-anotación cambia especificaciones técnicas meta-anotaciones tales como la retención?)
Y todo esto añade complejidad a lo de casos de uso ?
¿Desea saber si una anotación dada pertenece a una categoría?
Prueba esto:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
Como se puede ver, usted puede fácilmente grupo y clasificar las anotaciones sin dolor indebido utilizando las instalaciones previstas.
Por lo tanto, KISS es la razón por la que no se introduce un sistema de tipos de meta-tipo al lenguaje Java.
[p.s. editar]
Utilicé la cadena simplemente para la demostración y en vista de una metaanotación de final abierto. Para su propio proyecto dado, obviamente puede usar una enumeración de tipos de categorías y especificar múltiples categorías ("herencia múltiple") para una anotación dada. Ten en cuenta que los valores son totalmente falsas y sólo para fines de demostración:
@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 {
}
Nota, por cierto, que todas las anotaciones se extienden 'java.lang.annotation.Annotation', es decir, cualquier anotación es' instanceof' aunque este hecho no se declara explícitamente. –