Ich untersuche Anmerkungen und bin zu einem Punkt gekommen, an dem einige Anmerkungen eine Hierarchie zu haben scheinen.
Ich verwende Anmerkungen, um im Hintergrund Code für Karten zu generieren. Es gibt verschiedene Kartentypen (also unterschiedliche Codes und Anmerkungen), aber es gibt bestimmte Elemente, die wie ein Name gemeinsam sind.
@Target(value = {ElementType.TYPE})
public @interface Move extends Page{
String method1();
String method2();
}
Und dies wäre die übliche Anmerkung:
@Target(value = {ElementType.TYPE})
public @interface Page{
String method3();
}
Im obigen Beispiel würde ich erwarten, dass Move Methode3 erbt, aber ich erhalte eine Warnung, dass Extend mit Anmerkungen nicht gültig ist. Ich habe versucht, eine Annotation zu haben, die eine gemeinsame Basis erweitert, aber das funktioniert nicht. Ist das überhaupt möglich oder nur ein Designproblem?
java
inheritance
annotations
javydreamercsw
quelle
quelle
Antworten:
Unglücklicherweise nicht. Anscheinend hat es etwas mit Programmen zu tun, die die Anmerkungen einer Klasse lesen, ohne sie vollständig zu laden. Siehe Warum ist es nicht möglich, Anmerkungen in Java zu erweitern?
Typen erben jedoch die Annotationen ihrer Oberklasse, wenn diese Annotationen vorhanden sind
@Inherited
.Wenn Sie diese Methoden nicht für die Interaktion benötigen, können Sie auch die Anmerkungen in Ihrer Klasse stapeln:
Gibt es einen Grund, der für Sie nicht funktionieren würde?
quelle
Sie können Ihre Anmerkung mit einer Basisanmerkung anstelle einer Vererbung versehen. Dies wird im Spring Framework verwendet .
Um ein Beispiel zu geben
Anschließend können Sie überprüfen , ob eine Klasse mit Anmerkungen versehen ist
Vehicle
mit Spring AnnotationUtils :Diese Methode wird implementiert als:
AnnotationUtils
enthält auch zusätzliche Methoden zum Suchen nach Anmerkungen zu Methoden und anderen mit Anmerkungen versehenen Elementen. Die Spring-Klasse ist auch leistungsfähig genug, um überbrückte Methoden, Proxys und andere Eckfälle zu durchsuchen, insbesondere die in Spring angetroffenen.quelle
TYPE
oder habenANNOTATION_TYPE
.Zusätzlich zu Grygoriys Antwort auf Anmerkungen.
Sie können z. B. Methoden zum Enthalten einer
@Qualifier
Anmerkung (oder einer mit Anmerkungen versehenen Anmerkung@Qualifier
) in dieser Schleife überprüfen :Was Sie im Grunde tun, ist, alle Anmerkungen in der Methode und von diesen Anmerkungen zu erhalten, deren Typen Sie erhalten, und diese Typen zu überprüfen, wenn sie mit @Qualifier kommentiert sind. Ihre Annotation muss auch Target.Annotation_type aktiviert sein, damit dies funktioniert.
quelle
Schauen Sie sich https://github.com/blindpirate/annotation-magic an , eine Bibliothek, die ich entwickelt habe, als ich dieselbe Frage hatte.
quelle