Java注記-基礎
注記は、クラス、メソッド、パラメータ、変数、コンストラクタ、およびパッケージ宣言に適用される特殊な修飾子です.
公式の解釈は以下の通りです.
注釈は、プログラムコードを解釈するためのデータを提供する一連のメタデータですが、注釈は解釈されたコード自体の一部ではありません.注記は、コードの実行効果に直接影響しません.
注釈には多くの用途があります.主に以下の通りです.はコンパイラに情報を提供する:コンパイラは注釈を利用してエラーと警告情報 を検出することができる.コンパイルフェーズ時の処理:ソフトウェアツールは、注釈情報を利用してコード、Htmlドキュメントを生成したり、他の対応する処理をしたりすることができます. 実行時の処理:一部の注釈はプログラム実行時にコードの抽出を受け入れることができ、注釈はコード自体の一部ではないことに注意すべきである.
注釈はラベルのようなもので、必要な場所に貼ることができるという文章を見た.よく考えてみると確かに適切で、記録しています.
注記の定義:@interfaceキーワード定義を使用します.
注記の定義はインタフェースの定義とよく似ていますが、@記号が1つ増えただけです.
注記の使用:
メタ注記:
は、他の注釈を注釈するための基本的な注釈です.注釈クラスに別の注釈クラスを使用すると、使用される注釈クラスはメタ注釈と呼ばれます.
JAvaには主に4つのメタ注記があります:@Retention、@Documented、@Target、@Inherited
@Retention:英語の翻訳は保留、保持;注記の保存ポリシー(ライフサイクル)を定義します.
値は次のとおりです. RetentionPolicy.SOURCE注記はソースコードにのみ存在し、コンパイラがコンパイルされると破棄されます.したがって、これらの注釈はclassバイトコードに書き込まれません.@Override,@SuppressWarningsはいずれもこのような注釈に属する. RetentionPolicy.CLASS注記はclassバイトコードにコンパイルされますが、クラスのロード時に破棄され、JVMにロードされません.注記のデフォルトでは、この方法が使用されます. RetentionPolicy.RUNTIME注記は、プログラムが実行されるまで保持され、JVMにロードされるため、反射メカニズムを使用して注記の情報を読み取ることができます.カスタム注釈では、通常この方法が使用されます.
@Documented:注釈情報をjavaドキュメントに追加するかどうかを示します
@Target:注釈がどのような場所で使用できるかを示しますが、明確に指摘されていない場合は、その注釈をどこにでも置くことができます.
値の範囲は次のとおりです. ElementType.ANNOTATION_TYPE//注記 ElementType.CONTRUCTOR//構築方法 ElementType.FIELD//属性 ElementType.LOCAL_VARABLE//ローカル変数 ElementType.METHOD//方法 ElementType.PACKAGE//バッグ ElementType.PARAMETER//メソッド内のパラメータ ElementType.TYPE//クラス、インタフェース、列挙 などのタイプに注釈を付けることができます.
@Inherited:継承、遺伝;クラスが親を継承する注釈を表し、クラス要素にのみ有効です.
たとえば、親Aには注記TestAnnotationがあり、@Inherited宣言を使用して子Bが親Aを継承すると、クラスBは親Aの注記TestAnnotationも継承します.
注記のプロパティ
完全な注記には、次のようなプロパティも含まれます.プロパティ名の後にカッコ()を付ける必要があります.
注意:属性のタイプは、8つの基本データ型の追加クラス、インタフェース、注釈、およびそれらの配列でなければなりません.
注釈の使用:
注釈にvalueという属性が1つしかない場合は、注釈の後に値を追加するだけで、属性名を書く必要はありません.
注記に属性がない場合は、カッコなしで「@注記名」と書くだけです.
カスタム注釈を使用すると、これらのAnnotationは自分では有効になりません.開発者が適切なコードを提供してAnnotation情報を抽出して処理する必要があります.
注釈の内容を取得(ラベルを引き裂いてラベルの内容を表示)
注記を呼び出すには、反射メカニズムを使用する必要があります.
属性とメソッドで使用される注釈の類似性を取得します.
最後に参考のリンクを添付します:リンク
公式の解釈は以下の通りです.
注釈は、プログラムコードを解釈するためのデータを提供する一連のメタデータですが、注釈は解釈されたコード自体の一部ではありません.注記は、コードの実行効果に直接影響しません.
注釈には多くの用途があります.主に以下の通りです.
注釈はラベルのようなもので、必要な場所に貼ることができるという文章を見た.よく考えてみると確かに適切で、記録しています.
注記の定義:@interfaceキーワード定義を使用します.
public @interface TestAnnotation{
}
注記の定義はインタフェースの定義とよく似ていますが、@記号が1つ増えただけです.
注記の使用:
@TestAnnotation
public class Users{
}
メタ注記:
は、他の注釈を注釈するための基本的な注釈です.注釈クラスに別の注釈クラスを使用すると、使用される注釈クラスはメタ注釈と呼ばれます.
JAvaには主に4つのメタ注記があります:@Retention、@Documented、@Target、@Inherited
@Retention:英語の翻訳は保留、保持;注記の保存ポリシー(ライフサイクル)を定義します.
値は次のとおりです.
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation{}
@Documented:注釈情報をjavaドキュメントに追加するかどうかを示します
@Target:注釈がどのような場所で使用できるかを示しますが、明確に指摘されていない場合は、その注釈をどこにでも置くことができます.
値の範囲は次のとおりです.
@Inherited:継承、遺伝;クラスが親を継承する注釈を表し、クラス要素にのみ有効です.
たとえば、親Aには注記TestAnnotationがあり、@Inherited宣言を使用して子Bが親Aを継承すると、クラスBは親Aの注記TestAnnotationも継承します.
注記のプロパティ
完全な注記には、次のようなプロパティも含まれます.プロパティ名の後にカッコ()を付ける必要があります.
注意:属性のタイプは、8つの基本データ型の追加クラス、インタフェース、注釈、およびそれらの配列でなければなりません.
public @interface TestAnnotation{
String name() default "admin";// name admin
int userId();
}
注釈の使用:
@TestAnnotation(name="test",userId=1)
public class Test(){}
注釈にvalueという属性が1つしかない場合は、注釈の後に値を追加するだけで、属性名を書く必要はありません.
注記に属性がない場合は、カッコなしで「@注記名」と書くだけです.
カスタム注釈を使用すると、これらのAnnotationは自分では有効になりません.開発者が適切なコードを提供してAnnotation情報を抽出して処理する必要があります.
注釈の内容を取得(ラベルを引き裂いてラベルの内容を表示)
注記を呼び出すには、反射メカニズムを使用する必要があります.
/**
*isAnnotationPresent Test , TestAnnotation
**/
boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);
if ( hasAnnotation ) {
//getAnnotation ,
// getAnnotations()
TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);
System.out.println("userId:"+testAnnotation.userId());
System.out.println("name:"+testAnnotation.name());
}
属性とメソッドで使用される注釈の類似性を取得します.
//
Field userName = Test.class.getDeclaredField("userName");
userName.setAccessible(true);
TestAnnotation testAnnotation= userName.getAnnotation(TestAnnotation.class);
if ( testAnnotation!= null ) {
System.out.println("annotaiton value:"+testAnnotation.name());
}
//
Method testMethod = Test.class.getDeclaredMethod("testMethod");
if ( testMethod != null ) {
Annotation[] a = testMethod.getAnnotations();
for( int i = 0;i < a.length;i++) {
System.out.println("method annotation:"+ a[i].annotationType().getSimpleName());
}
}
最後に参考のリンクを添付します:リンク