Heim  >  Artikel  >  Java  >  Warum erben Java-Schnittstellen keine Anmerkungen?

Warum erben Java-Schnittstellen keine Anmerkungen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 11:47:30946Durchsuche

Why Don't Java Interfaces Inherit Annotations?

Annotationsvererbung in Java-Schnittstellen

Annotationsvererbung, angegeben durch die @Inherited-Annotation, ermöglicht die Weitergabe von Annotationen von Superklassen an Unterklassen. Eine bemerkenswerte Ausnahme von dieser Regel besteht jedoch darin, dass Annotationen auf implementierten Schnittstellen nicht von implementierenden Klassen geerbt werden.

Gemäß der Dokumentation für @Inherited „führt diese Metaannotation nur dazu, dass Annotationen von Superklassen geerbt werden; Annotationen.“ auf implementierte Schnittstellen haben keine Auswirkung . Betrachten Sie das folgende Beispiel:

Wenn Annotationen von Schnittstellen geerbt würden, welcher @Baz-Wert würde mit der MyClass.doStuff()-Methode verknüpft sein? „baz“, „phleem“ oder etwas anderes?

Praktische Implikationen

<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>

Annotationsvererbung auf Schnittstellen wird aufgrund der Möglichkeit von Konflikten allgemein als ungewöhnlich und unpraktisch angesehen Schwierigkeiten bei der Bestimmung der richtigen Annotation, wenn mehrere Schnittstellen widersprüchliche Annotationen angeben. Es ist ratsam, sich auf Annotationen zu Superklassen zu verlassen oder alternative Mechanismen zum Abfangen von Methoden in Dependency-Injection-Frameworks zu verwenden.

Das obige ist der detaillierte Inhalt vonWarum erben Java-Schnittstellen keine Anmerkungen?. 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