Exclusion d'héritage d'annotations dans les interfaces : une décision de conception délibérée
En Java, les classes n'héritent pas des annotations des interfaces implémentées. Cette exclusion est explicitement mentionnée dans la documentation Java pour l'annotation Inherited : les annotations sur les interfaces n'ont aucun effet.
Le raisonnement derrière cette décision est d'éviter les conflits et ambiguïtés d'héritage. Prenons l'exemple suivant :
<code class="java">@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() {} } public class MyClass extends Flipp implements Foo, Bar {}</code>
Si les interfaces pouvaient hériter d'annotations, alors la méthode doStuff dans MyClass hériterait de deux annotations contradictoires, @Baz("baz") de Foo et @Baz("phleem") de Bar. Cela créerait une ambiguïté dans le système, rendant difficile quelle annotation devrait être appliquée.
De plus, les annotations sur les interfaces implémentées introduiraient de multiples problèmes d'héritage. Étant donné que Java ne prend pas en charge l'héritage multiple au niveau de la classe, autoriser l'héritage des annotations des interfaces créerait effectivement une forme d'héritage multiple. Cela pourrait conduire à des scénarios encore plus complexes et à des conflits potentiels.
Par conséquent, la décision d'exclure l'héritage des annotations des interfaces a été prise pour maintenir la clarté, éviter les conflits et prévenir les problèmes potentiels dans la mise en œuvre du langage de programmation Java.
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!