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.

Author: mkobit, 2014-05-31

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.

 75
Author: fabian, 2015-10-12 02:01:28