Javaクラスが実装されたインターフェースから注釈を継承しないのはなぜですか?

ボリス・パブロビッチ:

私はGuiceのAOPを使用していくつかのメソッド呼び出しをインターセプトしています。私のクラスはインターフェイスを実装しています。Guiceが適切なメソッドを選択できるように、インターフェイスメソッドに注釈を付けたいと思います。Inheritedのjavaドキュメントに記載されているように、アノテーションタイプにInheritedアノテーション実装クラスでアノテーションが付けられていても、アノテーションは継承されません。

また、このメタ注釈は注釈がスーパークラスから継承されるだけであることにも注意してください。実装されたインターフェースの注釈は効果がありません。

これの理由は何でしょうか?オブジェクトのクラスが実行時に実装するすべてのインターフェースを知ることはそれほど難しいことではないので、この決定の背後には十分な理由があるはずです。

ショーンパトリックフロイド:

そうでなければ、多重継承の問題が発生するからだと思います。

例:

@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{}

私がこれをすると:

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

結果はどうなるのでしょうか?「baz」、「phleem」、または「flopp」?


このため、インターフェースの注釈が役立つことはほとんどありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

分類Dev

インターフェースを実装するJavaクラスは注釈を自動的に継承できますか?

分類Dev

Javaが内部インターフェースの継承を禁止しているのはなぜですか?

分類Dev

サブクラスのメソッド(パラメーター)に、実装されたインターフェースで定義された注釈があるかどうかを確認するにはどうすればよいですか?

分類Dev

基本クラスから継承されたインターフェイスをサブクラスで明示的に実装する必要がありますか?

分類Dev

継承されたデータ注釈が機能しなくなるのはなぜですか?

分類Dev

インタフェースmethod's注釈は、Java 7でなく、Javaで継承されている8

分類Dev

インターフェースを実装するクラスがJavaのインターフェースと同じ型としてカウントされないのはなぜですか?

分類Dev

クラスが子インターフェイスを実装しているのに、親は実装していないのはなぜですか?

分類Dev

インターフェースを実装する、継承された抽象クラスからの値を持つコンストラクター

分類Dev

クラスがインターフェースを実装するとき、クラスはインターフェース内で宣言された抽象内部クラスを継承しますか?

分類Dev

シングルトンパターンを使用したPHPでのクラス継承は、継承されたクラスのインスタンス変数が再初期化された場合にのみ機能します。しかし、なぜ?

分類Dev

Javaに複数の継承がないのに、複数のインターフェースの実装が許可されているのはなぜですか?

分類Dev

インターフェースから継承されたプロパティが仮想になるのはなぜですか?

分類Dev

フレンド関数が継承されたクラスのプライベート変数にアクセスできないのはなぜですか?

分類Dev

クラスを継承するインターフェイスと比較すると(FooはIBarです)、falseが返されます:なぜですか?

分類Dev

Spring:実装されたクラスではなく、インターフェースを自動配線するのはなぜですか?

分類Dev

C ++インターフェイスは完全に実装されたクラスから継承できますか?

分類Dev

なぜクラスの静的メソッドは継承されますが、インターフェースの静的メソッドは継承されないのですか?

分類Dev

2つのクラスを継承し、インターフェースから別々に実装します

分類Dev

継承されたインターフェイスをジェネリックコンテキストでベースインターフェイスに変換できないのはなぜですか?

分類Dev

実装されたインターフェイスメソッドを「パブリック」として宣言する必要があるのはなぜですか?

分類Dev

ミドルウェアがインターフェースを実装しないのはなぜですか?

分類Dev

Dlang:コンストラクターが継承されないのはなぜですか?

分類Dev

インターフェイスから継承できないのはなぜですか

分類Dev

クラスがSerializableインターフェースを実装するのはなぜですか?

分類Dev

Javaで抽象クラスを継承しながら、インターフェイスのすべてのメソッドを再度実装する必要がありますか?

分類Dev

一部の構造体がインターフェイスを継承しているのに、すべてのメンバーを実装していないのはなぜですか?

分類Dev

Kotlinで、列挙型クラスがインターフェイスを実装するときに、継承された宣言の衝突を回避するにはどうすればよいですか?

Related 関連記事

  1. 1

    クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

  2. 2

    インターフェースを実装するJavaクラスは注釈を自動的に継承できますか?

  3. 3

    Javaが内部インターフェースの継承を禁止しているのはなぜですか?

  4. 4

    サブクラスのメソッド(パラメーター)に、実装されたインターフェースで定義された注釈があるかどうかを確認するにはどうすればよいですか?

  5. 5

    基本クラスから継承されたインターフェイスをサブクラスで明示的に実装する必要がありますか?

  6. 6

    継承されたデータ注釈が機能しなくなるのはなぜですか?

  7. 7

    インタフェースmethod's注釈は、Java 7でなく、Javaで継承されている8

  8. 8

    インターフェースを実装するクラスがJavaのインターフェースと同じ型としてカウントされないのはなぜですか?

  9. 9

    クラスが子インターフェイスを実装しているのに、親は実装していないのはなぜですか?

  10. 10

    インターフェースを実装する、継承された抽象クラスからの値を持つコンストラクター

  11. 11

    クラスがインターフェースを実装するとき、クラスはインターフェース内で宣言された抽象内部クラスを継承しますか?

  12. 12

    シングルトンパターンを使用したPHPでのクラス継承は、継承されたクラスのインスタンス変数が再初期化された場合にのみ機能します。しかし、なぜ?

  13. 13

    Javaに複数の継承がないのに、複数のインターフェースの実装が許可されているのはなぜですか?

  14. 14

    インターフェースから継承されたプロパティが仮想になるのはなぜですか?

  15. 15

    フレンド関数が継承されたクラスのプライベート変数にアクセスできないのはなぜですか?

  16. 16

    クラスを継承するインターフェイスと比較すると(FooはIBarです)、falseが返されます:なぜですか?

  17. 17

    Spring:実装されたクラスではなく、インターフェースを自動配線するのはなぜですか?

  18. 18

    C ++インターフェイスは完全に実装されたクラスから継承できますか?

  19. 19

    なぜクラスの静的メソッドは継承されますが、インターフェースの静的メソッドは継承されないのですか?

  20. 20

    2つのクラスを継承し、インターフェースから別々に実装します

  21. 21

    継承されたインターフェイスをジェネリックコンテキストでベースインターフェイスに変換できないのはなぜですか?

  22. 22

    実装されたインターフェイスメソッドを「パブリック」として宣言する必要があるのはなぜですか?

  23. 23

    ミドルウェアがインターフェースを実装しないのはなぜですか?

  24. 24

    Dlang:コンストラクターが継承されないのはなぜですか?

  25. 25

    インターフェイスから継承できないのはなぜですか

  26. 26

    クラスがSerializableインターフェースを実装するのはなぜですか?

  27. 27

    Javaで抽象クラスを継承しながら、インターフェイスのすべてのメソッドを再度実装する必要がありますか?

  28. 28

    一部の構造体がインターフェイスを継承しているのに、すべてのメンバーを実装していないのはなぜですか?

  29. 29

    Kotlinで、列挙型クラスがインターフェイスを実装するときに、継承された宣言の衝突を回避するにはどうすればよいですか?

ホットタグ

アーカイブ