Heim >Java >javaLernprogramm >Warum erlaubt Java nicht, dass Schnittstellen Anmerkungen erben?

Warum erlaubt Java nicht, dass Schnittstellen Anmerkungen erben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-04 10:58:011063Durchsuche

Why doesn't Java allow interfaces to inherit annotations?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn