Erweiterbare Anmerkungen würden die Belastung durch die Angabe und Wartung eines anderen Typsystems effektiv erhöhen. Und dies wäre ein ziemlich einzigartiges Typsystem, so dass Sie nicht einfach ein OO-Typ-Paradigma anwenden könnten.
Denken Sie über alle Probleme nach, wenn Sie Polymorphismus und Vererbung in eine Annotation einführen (z. B. was passiert, wenn die Sub-Annotation Meta-Annotation-Spezifikationen wie die Aufbewahrung ändert?).
Und all diese zusätzliche Komplexität für welchen Anwendungsfall?
Sie möchten wissen, ob eine bestimmte Anmerkung zu einer Kategorie gehört?
Versuche dies:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
Wie Sie sehen, können Sie mithilfe der bereitgestellten Funktionen problemlos Anmerkungen ohne übermäßige Schmerzen gruppieren und kategorisieren.
Also, KISS ist der Grund für ein Meta-Typ - Typ - System auf die Java - Sprache einzuführen.
[ps edit]
Ich habe den String nur zur Demonstration und im Hinblick auf eine offene Meta-Annotation verwendet. Für Ihr eigenes Projekt können Sie natürlich eine Aufzählung von Kategorietypen verwenden und für eine bestimmte Anmerkung mehrere Kategorien ("Mehrfachvererbung") angeben. Beachten Sie, dass die Werte völlig falsch sind und nur zu Demonstrationszwecken dienen:
@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
, dh jede Annotation istinstanceof
es, obwohl diese Tatsache nicht explizit deklariert ist.