Ausschluss der Annotationsvererbung in Schnittstellen: Eine bewusste Entwurfsentscheidung
In Java erben Klassen keine Annotationen von implementierten Schnittstellen. Dieser Ausschluss wird in der Java-Dokumentation für die Annotation „Inherited“ ausdrücklich erwähnt: Annotationen auf Schnittstellen haben keine Auswirkung.
Der Grund für diese Entscheidung besteht darin, Vererbungskonflikte und Mehrdeutigkeiten zu verhindern. Betrachten Sie das folgende Beispiel:
<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>
Wenn Schnittstellen Annotationen erben könnten, dann würde die doStuff-Methode in MyClass zwei widersprüchliche Annotationen erben, @Baz("baz") von Foo und @Baz("phleem") von Bar. Dies würde zu Unklarheiten im System führen und es unklar machen, welche Annotation angewendet werden soll.
Darüber hinaus würden Annotationen auf implementierten Schnittstellen zu mehreren Vererbungsproblemen führen. Da Java die Mehrfachvererbung auf Klassenebene nicht unterstützt, würde die Zulassung der Vererbung von Annotationen von Schnittstellen praktisch zu einer Form der Mehrfachvererbung führen. Dies könnte zu noch komplexeren Szenarien und potenziellen Konflikten führen.
Daher wurde die Entscheidung getroffen, die Annotationsvererbung von Schnittstellen auszuschließen, um Klarheit zu gewährleisten, Konflikte zu vermeiden und potenziellen Problemen bei der Implementierung der Programmiersprache Java vorzubeugen.
Das obige ist der detaillierte Inhalt vonWarum erlaubt Java nicht, dass Schnittstellen Anmerkungen erben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!