Maison > Java > javaDidacticiel > Pourquoi les classes Java n'héritent-elles pas des annotations des interfaces implémentées ?

Pourquoi les classes Java n'héritent-elles pas des annotations des interfaces implémentées ?

Linda Hamilton
Libérer: 2024-11-04 18:18:02
original
577 Les gens l'ont consulté

Why Don't Java Classes Inherit Annotations from Implemented Interfaces?

Héritage des annotations dans les interfaces Java

Pourquoi les classes Java n'héritent-elles pas des annotations des interfaces implémentées ? Ce comportement est spécifiquement décrit dans la documentation de l'annotation @Inherited :

Note also that this meta-annotation only causes annotations to be inherited from superclasses; annotations on implemented interfaces have no effect.
Copier après la connexion

Ce choix est délibéré, car il évite un type subtil de conflit d'héritage multiple. Prenons l'exemple suivant :

<code class="java">@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface Baz {
    String value();
}

public interface Foo {
    @Baz("baz")
    void doStuff();
}

public interface Bar {
    @Baz("phleem")
    void doStuff();
}

public class Flipp {
    @Baz("flopp")
    public void doStuff() {}
}

public class MyClass extends Flipp implements Foo, Bar {}</code>
Copier après la connexion

Si les annotations des interfaces étaient héritées, l'appel de MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value() entraînerait une ambiguïté :

  • L'annotation @Baz de Foo doit-elle être héritée ?
  • Ou l'annotation @Baz de Bar doit-elle être héritée ?
  • Ou l'annotation @Baz de Flipp la superclasse est-elle héritée ?

Pour éviter ce conflit, Java n'hérite explicitement pas des annotations des interfaces. Cela garantit que la hiérarchie d'héritage des annotations est claire et cohérente.

Dans les cas où des annotations d'interface sont souhaitées, il est recommandé d'annoter explicitement les méthodes de classe d'implémentation. Cela offre la flexibilité de contrôler les annotations spécifiques appliquées à chaque méthode.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal