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
Linda Hamiltonoriginal
2024-11-04 18:18:02613parcourir

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.

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>

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!

Déclaration:
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