Je ne reçois pas l'annotation @Inherited
En Java. S'il hérite automatiquement des méthodes pour vous, alors si j'ai besoin de mettre en œuvre la méthode à ma façon, alors qu'en est-il?
Comment saura-t-on connaître mon mode de mise en œuvre?
De plus, il est dit que si je ne veux pas l'utiliser et que je le fais plutôt à l'ancienne Java façon, je dois implémenter la equals()
, toString()
et les méthodes hashCode()
de la classe Object
ainsi que la méthode de type d'annotation de la classe Java.lang.annotation.Annotation
.
Pourquoi donc?
Je n'ai jamais implémenté ceux-là même quand je ne connaissais pas l'annotation @Inherited
Et les programmes fonctionnaient bien également.
S'il vous plaît, quelqu'un m'explique à partir de zéro à ce sujet.
Juste qu'il n'y a pas de malentendu: vous posez des questions sur Java.lang.annotation.Inherited . Il s'agit d'une annotation pour les annotations. Cela signifie que les sous-classes de classes annotées sont considérées comme ayant la même annotation que leur super-classe.
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écuter 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 à celui-ci (en fonction des packages 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 ça.