私はとSuperClass
とアノテーションDocAnnotation
を持っています。すべてのクラスの注釈をとSuperClass
から取得するには、SubClass.foo()
への電話が必要です。@継承されたアノテーションは継承されていません
スーパークラス
package Code
import Annotations.DocAnnotation;
import java.util.Arrays;
@DocAnnotation("Super Annotation")
public class SuperClass {
public void foo() {
System.out.println(Arrays.toString(this.getClass().getAnnotations()));
System.out.println(Arrays.toString(this.getClass().getDeclaredAnnotations()));
}
}
サブクラス
package Code;
import Annotations.DocAnnotation;
@DocAnnotation("Sub Annotation")
public class SubClass extends SuperClass{
}
DocAnnotation私は"Super Annotation"
と"Sub Annotation"
の両方を見ることを期待ではなく、私SubClass.fooを実行
package Annotations;
import java.lang.annotation.Inherited;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(DocAnnotations.class)
public @interface DocAnnotation {
String value();
}
:クラスは、次のように定義されていますのみを表示0。 @inheritedが何をしているのか誤解していますか、間違って何かしていますか?
編集:
注釈を追加した後@DocAnnotation("Super Annotation")
(つまりSuperClass
と同じものをだ)、それは実際にでの使用のために1回、2回現れ、一度SuperClass
での使用のために!今私は何かを誤解していることをほとんど確信しています...
私はコンテナの注釈を完全に忘れてしまった!それは本当にループのために私を投げていた...私が記述している動作が可能かどうか知っていますか?私は直接サブクラスが拡張するすべてのクラスを照会することができましたが、それは醜いコードのようです。より良い解決策はありますか? – bendl
私はそうは思わない。別の解決策は、注釈を完全に放棄してインタフェースを使用することです。あなたのケースではそれが良いかどうかは本当に言えませんが、クラスに注釈を付けるのでうまくいく可能性があります。 – Radiodef
私は注釈に固執しなければならないと思うが、ありがとう!あなたがバグレポートを提出することになったら、ここにリンクを投稿してください。私は、オラクルがこの振る舞いも期待しているかどうかを知ることに興味があります。 – bendl