Maison >Java >javaDidacticiel >Pourquoi les interfaces Java n'héritent-elles pas des annotations ?
Héritage des annotations dans les interfaces Java
L'héritage des annotations, désigné par l'annotation @Inherited, permet aux annotations d'être propagées des superclasses aux sous-classes. Cependant, une exception notable à cette règle est que les annotations sur les interfaces implémentées ne sont pas héritées par les classes implémentées.
Selon la documentation de @Inherited, "cette méta-annotation entraîne uniquement l'héritage des annotations des superclasses ; les annotations sur les interfaces implémentées n'ont aucun effet. . Prenons l'exemple suivant :
Si les annotations étaient héritées des interfaces, quelle valeur @Baz serait associée à la méthode MyClass.doStuff() ? "baz", "phleem" ou autre chose ?
Implications pratiques
<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 MyClass implements Foo, Bar{}</code>
L'héritage d'annotations sur les interfaces est généralement considéré comme rare et peu pratique en raison du potentiel de conflits et de la difficulté à déterminer l’annotation légitime lorsque plusieurs interfaces spécifient des annotations contradictoires. Il est conseillé de s'appuyer sur des annotations sur les superclasses ou d'utiliser des mécanismes alternatifs d'interception de méthodes dans les frameworks d'injection de dépendances.
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!