Ich habe Guices AOP verwendet, um einige Methodenaufrufe abzufangen. Meine Klasse implementiert eine Schnittstelle und ich möchte die Schnittstellenmethoden mit Anmerkungen versehen, damit Guice die richtigen Methoden auswählen kann. Selbst wenn der Annotationstyp mit der Implementierungsklasse für geerbte Annotationen annotiert wird, erbt die Annotation nicht die Annotation, wie in Inheriteds Java-Dokument angegeben:
Beachten Sie auch, dass diese Meta-Annotation nur dazu führt, dass Annotationen von Superklassen geerbt werden. Anmerkungen zu implementierten Schnittstellen haben keine Auswirkung.
Was könnte der Grund dafür sein? Es ist nicht so schwer, alle Schnittstellen kennenzulernen, die die Klasse eines Objekts zur Laufzeit implementiert. Es muss also einen guten Grund für diese Entscheidung geben.
quelle
The field value is ambiguous.
ähnlichen Compilerfehler erwarten, genau wie bei zwei Schnittstellen, die dieselbe Konstante mit unterschiedlichen Werten deklarieren. Ich weiß, dass dies kein Feld ist, aber Annotationswerte werden alle beim Kompilieren aufgelöst, nicht wahr? Die Funktion, die wir hier vermissen, wäre in vielen Fällen sehr hilfreich. Tut mir leid, dass ich einen alten Beitrag wiederbelebt habe :).Foo
Annotation des 's finden (MyClass
hat keine, dann werden die Schnittstellen durchsucht und in der Reihenfolge genommen, in der sie sich befindenimplements
) und daher "baz" drucken. Cool.Aus dem Javadoc für @Inherited:
Auf der anderen Seite führen JSR 305-Validatoren eine Art Vererbungssuche durch. Wenn Sie eine Klassenhierarchie haben:
Dann werden die effektiven Validierungen
Student.getAge()
sind@Nonnull @Min(5)
.@Nonnull
hat keine@Inherited
Meta-Annotation.quelle
@Inherited
keine Auswirkung auf etwas anderes als die Klasse hat