Ich habe eine SubClass
und eine SuperClass
, sowie eine Anmerkung DocAnnotation
. Ich brauche einen Anruf an SubClass.foo()
, um alle Klassenanmerkungen von SubClass
und SuperClass
zu erhalten. Die Klassen sind wie folgt definiert:@herited Annotation wird nicht vererbt
Oberklasse
package Code
import Annotations.DocAnnotation;
import java.util.Arrays;
@DocAnnotation("Super Annotation")
public class SuperClass {
public void foo() {
System.out.println(Arrays.toString(this.getClass().getAnnotations()));
System.out.println(Arrays.toString(this.getClass().getDeclaredAnnotations()));
}
}
SubClass
package Code;
import Annotations.DocAnnotation;
@DocAnnotation("Sub Annotation")
public class SubClass extends SuperClass{
}
DocAnnotation
package Annotations;
import java.lang.annotation.Inherited;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(DocAnnotations.class)
public @interface DocAnnotation {
String value();
}
Lauf SubClass.foo Ich erwarte, dass "Super Annotation"
und "Sub Annotation"
beide sehen, sondern ich siehe nur [@Annotations.DocAnnotation(value=Sub Annotation)]
. Missverstehe ich, was @inherited tut, oder mache ich etwas falsch?
Edit:
Nach dem Hinzufügen der Annotation @DocAnnotation("Super Annotation")
-SubClass
(das ist das gleiche wie in SuperClass
) zweimal tatsächlich auftaucht, einmal für den Einsatz in SubClass
und einmal für den Einsatz in SuperClass
! Jetzt bin ich fast sicher, dass ich etwas falsch verstehe ...
Ich habe die Containeranmerkung total vergessen! Das hat mich wirklich zu einer Schleife gebracht ... Weißt du, ob das Verhalten, das ich beschreibe, möglich ist? Ich könnte direkt alle Klassen abfragen, die die Unterklasse erweitert, aber das scheint hässlicher Code zu sein. Gibt es eine bessere Lösung? – bendl
Ich glaube nicht. Eine andere Lösung könnte darin bestehen, Annotationen ganz aufzugeben und eine Schnittstelle zu verwenden. Ich kann nicht wirklich sagen, ob das für Ihren Fall besser ist, aber es könnte funktionieren, da Sie den Kurs kommentieren. – Radiodef
Ich denke, ich werde mich an Anmerkungen halten müssen, aber danke! Wenn du am Ende einen Fehlerbericht einreichst, poste bitte einen Link hier. Ich wäre interessiert zu wissen, ob Oracle auch dieses Verhalten erwartet. – bendl