Heim > Java > javaLernprogramm > Warum erben Java-Klassen keine Anmerkungen von implementierten Schnittstellen?

Warum erben Java-Klassen keine Anmerkungen von implementierten Schnittstellen?

Linda Hamilton
Freigeben: 2024-11-04 18:18:02
Original
578 Leute haben es durchsucht

Why Don't Java Classes Inherit Annotations from Implemented Interfaces?

Annotationsvererbung in Java-Schnittstellen

Warum erben Java-Klassen keine Annotationen von implementierten Schnittstellen? Dieses Verhalten wird in der Dokumentation zur @Inherited-Annotation speziell beschrieben:

Note also that this meta-annotation only causes annotations to be inherited from superclasses; annotations on implemented interfaces have no effect.
Nach dem Login kopieren

Diese Wahl ist bewusst, da sie eine subtile Art von Mehrfachvererbungskonflikt verhindert. Betrachten Sie das folgende Beispiel:

<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 Flipp {
    @Baz("flopp")
    public void doStuff() {}
}

public class MyClass extends Flipp implements Foo, Bar {}</code>
Nach dem Login kopieren

Wenn Annotationen von Schnittstellen geerbt würden, würde der Aufruf von MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value() zu einer Mehrdeutigkeit führen:

  • Sollte die @Baz-Annotation von Foo geerbt werden?
  • Oder sollte die @Baz-Annotation von Bar geerbt werden?
  • Oder sollte die @Baz-Annotation von Flipp Superklasse vererbt werden?

Um diesen Konflikt zu vermeiden, erbt Java ausdrücklich keine Annotationen von Schnittstellen. Dadurch wird sichergestellt, dass die Vererbungshierarchie für Annotationen klar und konsistent ist.

In Fällen, in denen Schnittstellenannotationen gewünscht sind, wird empfohlen, die implementierenden Klassenmethoden explizit zu annotieren. Dies bietet die Flexibilität, die spezifischen Anmerkungen zu steuern, die auf jede Methode angewendet werden.

Das obige ist der detaillierte Inhalt vonWarum erben Java-Klassen keine Anmerkungen von implementierten Schnittstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage