ホームページ >Java >&#&チュートリアル >Java アノテーションの文書化と継承に関する保持の概要

Java アノテーションの文書化と継承に関する保持の概要

高洛峰
高洛峰オリジナル
2017-01-23 15:21:531464ブラウズ

保持アノテーション

保持 (保持) アノテーションは、このタイプのアノテーションがその段階まで保持されることを示します。 3 つの値があります:
1.RetentionPolicy.SOURCE - このタイプのアノテーションは、コンパイル中にソース コード レベルでのみ保持されます。無視されます
2.RetentionPolicy.CLASS - このタイプのアノテーションはコンパイル中に保持され、クラスファイルに存在しますが、JVM は無視します
3.RetentionPolicy.RUNTIME - このタイプのアノテーションは JVM によって保持されます。これらは、実行時にリフレクション メカニズムを使用して JVM または他のコードによって読み取られて使用できます。
例 5 は、RetentionPolicy.RUNTIME の宣言を示しています。

Java アノテーションの例 1:

@Retention(RetentionPolicy.RUNTIME)
public @interface Test_Retention {
   String doTestRetention();
}

この例では、 @ The Retention(RetentionPolicy) .RUNTIME) アノテーションは、Test_Retention アノテーションが実行時にリフレクションを通じて読み取れるように仮想マシンによって保持されることを示します。

ドキュメント化されたアノテーションは、このアノテーションが javadoc ツールによって記録される必要があることを示します。 javadoc アノテーションは含まれません。ただし、アノテーションの宣言時に @Documented が指定されている場合、アノテーションは javadoc などのツールによって処理されるため、生成されるドキュメントにはアノテーションのタイプ情報も含まれます。例 6 では、@ の使用方法をさらに示します。ドキュメント:

Java アノテーションの例 2:

@Documented
public @interface Test_Documented {
   String doTestDocument();
}

次に、TestAnnotations クラスを以下のように変更します:

public class TestAnnotations {
   public static void main(String arg[]) {
      new TestAnnotations().doSomeTestRetention();
      new TestAnnotations().doSomeTestDocumented();
   }
   @Test_Retention (doTestRetention="保留注解信息测试")
   public void doSomeTestRetention() {
      System.out.printf("测试注解类型 'Retention'");
   }
   @Test_Documented(doTestDocument="Hello document")
   public void doSomeTestDocumented() {
      System.out.printf("测试注解类型 'Documented'");
   }
}

次に、javadoc コマンドを使用して TestAnnotations.html ファイルを生成すると、図 1 のような結果が表示されます。 .

Java アノテーションの文書化と継承に関する保持の概要 スクリーンショットからわかるように、ドキュメントには doSomeTestRetention() メソッドのアノテーション タイプの情報 () メソッドはありません。ただし、doSomeTestDocumented() メソッドのドキュメントには、これは、Test_Documented Annotation に @Documented タグが追加されているためです。

Inherited アノテーションが指定されていないためです (この段落に問題がある可能性があります...)。より複雑なアノテーション タイプ。より具体的には、アノテーションを定義するときに @Inherited タグを使用し、その親クラスにサブクラスがある場合に、その定義されたアノテーションを使用することを示します。親クラスのすべての属性はそのサブクラスに継承されます。 例 7 では、@Inherited タグを使用する利点がわかります。

まず、アノテーションを定義します。クラスにアノテーションを付けます:

@Inherited
public @interface MyParentObject { 
      boolean isInherited() default true;
      String doSomething() default "Do what?";
}

ご覧のとおり、 @Inherited タグがあるため、これらは自動的に継承されます。実装クラスを定義する古い方法ですか? 以下の古い実装を見てください: 違いがわかりますか? isInherited() と doSomething() に加えて、すべてのメソッドを実装する必要があります。 myParentObject のメソッドを実装する場合は、java.lang.Object の equals()、toString()、および hasCode() メソッドも実装する必要があります。また、java.lang.annotation.Annotation クラスの annotationType() メソッドも実装する必要があります。これらのメソッドを実装するかどうかにかかわらず、これらを含むオブジェクトを継承する必要があります。

結論

この記事では、JDK5 のアノテーション機能を使用して開発を容易にする方法を説明しました。デプロイメント ツールは、何らかの方法でこれらのアノテーションを読み取って処理できます。アノテーションを使用するプログラムは、アノテーションを使用すると、追加の Java ソース ファイル、XML ドキュメント、またはその他の古い成果物を置き換えることができ、より少ないコードで同じことを実現でき、コンパイル時のエラー検出が向上します。アノテーションの目的 この記事は、Java アノテーション シリーズの第 1 部であり、アノテーションを使用して開発する方法を学習します。最後に、3 番目の部分では、複数のデータベース テーブルを含む複雑な例を示します。

Java アノテーションの導入、文書化、および継承に関する詳細な記事については、次の記事を参照してください。 PHPの中国語サイトです!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。