Javaで@Inherited
注釈を取得していません。メソッドが自動的に継承される場合、独自の方法でメソッドを実装する必要がある場合はどうでしょうか?
私の実装方法を知る方法は?
さらに、これを使用したくない場合は、昔ながらのJava方法でequals()
、toString()
を実装する必要があります、およびObject
クラスのhashCode()
メソッド、およびJava.lang.annotation.Annotation
クラスの注釈型メソッド。
何故ですか?
@Inherited
アノテーションと、正常に動作するために使用されるプログラムについて知らなかった場合でも、これらを実装したことはありません。
誰かがこれについて最初から説明してください。
誤解がないということだけです: Java.lang.annotation.Inherited について尋ねます。これは、注釈の注釈です。注釈付きクラスのサブクラスは、スーパークラスと同じ注釈を持つと見なされます。
次の2つの注釈を考慮してください。
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedAnnotationType {
}
そして
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface UninheritedAnnotationType {
}
このように3つのクラスに注釈が付けられている場合:
@UninheritedAnnotationType
class A {
}
@InheritedAnnotationType
class B extends A {
}
class C extends B {
}
このコードを実行する
System.out.println(new A().getClass().getAnnotation(InheritedAnnotationType.class));
System.out.println(new B().getClass().getAnnotation(InheritedAnnotationType.class));
System.out.println(new C().getClass().getAnnotation(InheritedAnnotationType.class));
System.out.println("_________________________________");
System.out.println(new A().getClass().getAnnotation(UninheritedAnnotationType.class));
System.out.println(new B().getClass().getAnnotation(UninheritedAnnotationType.class));
System.out.println(new C().getClass().getAnnotation(UninheritedAnnotationType.class));
次のような結果を出力します(注釈のパッケージによって異なります)。
null
@InheritedAnnotationType()
@InheritedAnnotationType()
_________________________________
@UninheritedAnnotationType()
null
null
ご覧のとおり、UninheritedAnnotationType
は継承されませんが、C
はInheritedAnnotationType
から注釈B
を継承します。
どのメソッドがそれと関係があるのか分かりません。