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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-04 10:32:01856parcourir

Why Don't Java Classes Inherit Annotations from Interfaces?

Annotations héritées : exclusion d'interface

Malgré le type d'annotation portant l'annotation Inherited, les classes Java n'héritent pas des annotations des interfaces implémentées. Ce comportement provient de conflits d'héritage potentiels.

Considérons l'exemple suivant :

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface Baz { String value(); }

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

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

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

class MyClass extends Flipp implements Foo, Bar {}

Lors de l'accès aux annotations via la réflexion :

MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value();

Le résultat devient ambigu, car il il n'y a pas de chemin d'héritage clair pour l'annotation. Serait-ce « baz », « phleem » ou « flopp » ?

Pour éviter de tels conflits et maintenir la clarté, Java exclut intentionnellement les annotations héritées des interfaces. Les annotations placées sur les méthodes d'interface ont généralement une utilité limitée en raison de cette restriction d'héritage.

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