ホームページ > Java > &#&チュートリアル > Java クラスがインターフェイスからアノテーションを継承しないのはなぜですか?

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

Linda Hamilton
リリース: 2024-11-04 10:32:01
オリジナル
806 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート