Comment utiliser l'annotation @ héritée en Java?
Je n'obtiens pas l'annotation @Inherited
en Java. S'il hérite automatiquement des méthodes pour vous, alors si je dois implémenter la méthode à ma manière, qu'en est-il ?
Comment va-t-il connaître mon mode de mise en œuvre ?
De plus, il est dit que si je ne veux pas l'utiliser et le faire plutôt de manière Java à l'ancienne, je dois implémenter le le equals()
, toString()
, et les méthodes hashCode()
de la classe Object
et aussi la méthode de type d'annotation de la java.lang.annotation.Annotation
classe.
Pourquoi est-ce?
Je n'ai jamais implémenté ceux-ci même lorsque je ne connaissais pas l'annotation @Inherited
et les programmes utilisés pour fonctionner correctement également .
S'il vous plait, quelqu'un m'explique à partir de zéro à ce sujet.
1 answers
Juste qu'il n'y a pas de malentendu: Vous posez des questions sur java.lang.annotation.Hérité. Ceci est une annotation pour annotations.It signifie que les sous-classes de classes annotées sont considérées comme ayant la même annotation que leur superclasse.
Exemple
Considérez les 2 annotations suivantes:
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedAnnotationType {
}
Et
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface UninheritedAnnotationType {
}
Si trois classes sont annotées comme ceci:
@UninheritedAnnotationType
class A {
}
@InheritedAnnotationType
class B extends A {
}
class C extends B {
}
Exécution de ce code
System.out.println(new A().getClass().getAnnotation(InheritedAnnotationType.class));
System.out.println(new B().getClass().getAnnotation(InheritedAnnotationType.class));
System.out.println(new C().getClass().getAnnotation(InheritedAnnotationType.class));
System.out.println("_________________________________");
System.out.println(new A().getClass().getAnnotation(UninheritedAnnotationType.class));
System.out.println(new B().getClass().getAnnotation(UninheritedAnnotationType.class));
System.out.println(new C().getClass().getAnnotation(UninheritedAnnotationType.class));
Affichera un résultat similaire à ce (en fonction des paquets de l'annotation):
null
@InheritedAnnotationType()
@InheritedAnnotationType()
_________________________________
@UninheritedAnnotationType()
null
null
Comme vous pouvez le voir UninheritedAnnotationType
n'est pas hérité mais C
hérite de l'annotation InheritedAnnotationType
de B
.
Je ne sais pas quelles méthodes ont à voir avec cela.