1. 最初にソース コード ドキュメントをお読みください
@Recorded
@Retention(Retention Policy. RUNTIME)
@Target(ElementType.コメント タイプ)
public@interfaceInherited{
}上記のコードの注釈は、Google を使用して翻訳できます。大まかな意味は
で、アノテーション型の自動継承を示します。アノテーション型宣言に継承されたメタアノテーションがあり、ユーザーがクラス宣言でアノテーション型をクエリし、クラス宣言にこの型のアノテーションがない場合、クラスのスーパークラスは自動的にアノテーション型をクエリします。 。このプロセスは、このタイプのアノテーションが見つかるか、クラス階層の最上位に到達するまで繰り返されます。どのスーパークラスにもこのタイプの注釈がない場合、クエリはクラスにそのような注釈がないことを示します。
このメタ アノテーション タイプは、クラス以外のものにアノテーションを付けるために使用した場合には効果がないことに注意してください。また、このメタ アノテーションはスーパークラスからアノテーションを継承するだけであり、実装されたインターフェイスでは無効なアノテーションになることにも注意してください。
上記の説明からわかるように、このアノテーションを使用するアノテーションの親クラスのサブクラスは、親クラスのアノテーションを継承することができます。
#2. コード テスト
2.1 には @Inherited アノテーションがあります
@Target(ElementType.Type)@Retention(保持ポリシー。RUNTIME)@Inheritancepublic @interfaceInheritedTest {string value();}@InheritedTest('継承があります')publicclassperson{publicvoidmethod(){}publicvoidmethod2(){}} publicclassstudentextends person {}テスト: publicclassTestInherited{public static void main(String[]args){CLaSS StudentCLaSS=student . class; if(student class . is notationpresent(inherited test . class)){system . out . println(StudentClass . GetAnnotation(InheritedTest . Class)). value()); }}} 出力: 2.2 @Inherited アノテーションなし @Target(ElementType.Type)@Retention(Retention Policy.RUNTIME)public @interfacesinotinherited {string value();} @ IsNotInherited('所有されていない継承')publicclassperson{publicvoidmethod(){}publicvoidmethod2(){}} publicclassstudentextends person {}テスト: publicclassTestInherited{public static void main(String[]args){CLaSS StudentCLaSS=student . class;if(StudentClass . is notationPresent(iSnotinerIded . Class)){system . out . println(StudentClass . GetAnnotation(iSNOTiHerided . class) )。 value());}}}@Inherited アノテーションのない許容誤差、表示されるサブクラスを出力しません。このアノテーションは出力されません。受け継がれる。
以上がJavaプロジェクトで@Inheritedメタアノテーションを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。