ホームページ  >  記事  >  Java  >  Java クラスがインターフェイスからアノテーションを継承しないのはなぜですか?

Java クラスがインターフェイスからアノテーションを継承しないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-04 10:32:01745ブラウズ

Why Don't Java Classes Inherit Annotations from Interfaces?

継承されたアノテーション: インターフェイスの除外

Inherited アノテーションを保持するアノテーション タイプにもかかわらず、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() {}
}

class MyClass extends Flipp implements Foo, Bar {}

リフレクション経由でアノテーションにアクセスする場合:

MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value();

結果は、次のようにあいまいになります。アノテーションの明確な継承パスがありません。それは "baz"、"phleem"、または "flopp" でしょうか?

このような競合を回避し、明確さを維持するために、Java は継承されたアノテーションをインターフェイスから意図的に除外します。インターフェイス メソッドに配置されたアノテーションは、通常、この継承制限のため、実用性が限られています。

以上がJava クラスがインターフェイスからアノテーションを継承しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。