Javaノート5-注記
9484 ワード
目次注釈 を使用定義注記 処理注記 メモは廖雪峰の公式サイト-Javaチュートリアル-注釈から抜粋した.
注釈の使用
注記(Annotation)は、Javaソースコードのクラス、メソッド、フィールド、パラメータの前に置かれる特殊な「注釈」です.
Javaの注記は、次の3つに分類されます.第1のクラスは、コンパイラによって使用される注釈であり、例えば、 の第2のクラスは、classをロードするときにclassを動的に修正し、特殊な機能を実現するツール処理.classファイルで使用される注釈です.このような注釈は.classファイルにコンパイルされますが、ロードが終了するとメモリには存在しません.このような注釈は、一般的には自分で処理する必要はありません. の第3のクラスは、プログラムの実行中に読み取ることができる注釈であり、ロード後もJVMに存在し続け、これも最も一般的な注釈である.たとえば、@PostConstructが構成されているメソッドは、構築メソッドが呼び出された後に自動的に呼び出されます(これはJavaコードが注釈を読み取る機能で、JVMは注釈を認識しません).
注記を定義する場合は、構成パラメータを定義することもできます.構成を指定しないパラメータはデフォルト値を使用します.構成パラメータは次のとおりです.すべての基本タイプ; String; 列挙タイプ; 基本タイプ、String、Class、および列挙された配列. Classタイプとその配列.
構成パラメータは定数でなければならないため、上記の制限は、注釈が定義時に各パラメータの値を決定したことを保証します.
注釈の定義
注記のパラメータは、パラメータなしメソッドと同様にdefaultでデフォルト値を設定できます(強く推奨).最も一般的なパラメータはvalueと命名する必要があります.
メタ注釈には、メタ注釈(meta annotation)と呼ばれる他の注釈を修飾する注釈があります.
@Targetで最もよく使われるメタ注記は@Targetです.@Targetを使用して、定義された注記Annotationをソースコードに適用できる場所を定義します.クラスまたはインタフェース:ElementType.TYPE; フィールド:ElementType.FIELD; 方法:ElementType.METHOD; 構造方法:ElementType.CONTRUCTOR; メソッドパラメータ:ElementType.PARAMETER.
たとえば、注記@Reportをメソッドで使用できるように定義するには、@Target(ElementType.METHOD)を追加する必要があります.
注記を定義@Reportはメソッドまたはフィールドで使用できます.@Target注記パラメータを配列{ElementType.METHOD,ElementType.FIELD}に変更できます.
@Retentionのもう一つの重要なメタ注記@RetentionはAnnotationのライフサイクルを定義します.コンパイル期間のみ:RetentionPolicy.SOURCE; classファイルのみ:RetentionPolicy.CLASS; 運行期間:RetentionPolicy.RUNTIME.
@Retentionが存在しない場合、AnnotationのデフォルトはCLASSです.通常はRUNTIMEと定義されます.
@Repeatable@Repeatableというメタ注記を使用して、Annotationが繰り返し可能かどうかを定義します.この注釈の応用は特に広くない.詳細は@Repeatableを参照してください.
@Inherited@Inheritedを使用して、子クラスが親定義のAnnotationを継承できるかどうかを定義します.@Inheritedは@Target(ElementType.TYPE)タイプのannotationのみに有効であり、classの継承のみに対してinterfaceの継承は無効である.
Annotationの最初のステップを定義する方法をまとめ、@interfaceで注釈を定義します.第2歩、パラメータ、デフォルト値を追加します:最もよく使われるパラメータをvalue()と定義して、すべてのパラメータができるだけデフォルト値を設定することをお勧めします;ステップ3では、@Targetと@Retentionを設定する必要があるメタ注釈で注釈を構成します.通常、@RetentionはRUNTIMEに設定されます.なぜなら、カスタマイズされた注釈は通常、実行期間中に読み取る必要があるからです.一般的に@Inheritedと@Repeatableを書く必要はありません.
注釈の処理
運転期間中にRUNTIMEタイプの注記を反射して読み取ることができます.@Retention(RetentionPolicy.RUNTIME)を漏らさないように注意してください.そうしないと、運転期間はこの注記を読み取ることができません.
注記をプログラムで処理することで、次の機能を実現できます. JavaBeanの属性値を規則的にチェックする. JUnitは@Testタグのテスト方法を自動的に実行します.
ちょっとこまごましたので、使うときに見てください.詳細は注釈の処理を参照してください.サイトの原文のコメントを読むと、収穫があります.
注釈の使用
注記(Annotation)は、Javaソースコードのクラス、メソッド、フィールド、パラメータの前に置かれる特殊な「注釈」です.
// this is a component:
@Resource("hello")
public class Hello {
@Inject
int n;
@PostConstruct
public void hello(@Param String name) {
System.out.println(name);
}
@Override
public String toString() {
return "Hello";
}
}
Javaの注記は、次の3つに分類されます.
@Override: ;
@SuppressWarnings: 。
.class , 。
注記を定義する場合は、構成パラメータを定義することもできます.構成を指定しないパラメータはデフォルト値を使用します.構成パラメータは次のとおりです.
構成パラメータは定数でなければならないため、上記の制限は、注釈が定義時に各パラメータの値を決定したことを保証します.
public class Hello {
@Check(min=0, max=100, value=55)
public int n;
@Check(value=99)
public int p;
@Check(99) // @Check(value=99)
public int x;
@Check //
public int y;
}
注釈の定義
Java @interface :
, value ;
@Target Annotation ;
@Retention(RetentionPolicy.RUNTIME) Annotation
注記のパラメータは、パラメータなしメソッドと同様にdefaultでデフォルト値を設定できます(強く推奨).最も一般的なパラメータはvalueと命名する必要があります.
public @interface Report {
int type() default 0;
String level() default "info";
String value() default "";
}
メタ注釈には、メタ注釈(meta annotation)と呼ばれる他の注釈を修飾する注釈があります.
@Targetで最もよく使われるメタ注記は@Targetです.@Targetを使用して、定義された注記Annotationをソースコードに適用できる場所を定義します.
たとえば、注記@Reportをメソッドで使用できるように定義するには、@Target(ElementType.METHOD)を追加する必要があります.
@Target(ElementType.METHOD)
public @interface Report {
int type() default 0;
String level() default "info";
String value() default "";
}
注記を定義@Reportはメソッドまたはフィールドで使用できます.@Target注記パラメータを配列{ElementType.METHOD,ElementType.FIELD}に変更できます.
@Target({
ElementType.METHOD,
ElementType.FIELD
})
public @interface Report {
...
}
@Retentionのもう一つの重要なメタ注記@RetentionはAnnotationのライフサイクルを定義します.
@Retentionが存在しない場合、AnnotationのデフォルトはCLASSです.通常はRUNTIMEと定義されます.
@Repeatable@Repeatableというメタ注記を使用して、Annotationが繰り返し可能かどうかを定義します.この注釈の応用は特に広くない.詳細は@Repeatableを参照してください.
@Inherited@Inheritedを使用して、子クラスが親定義のAnnotationを継承できるかどうかを定義します.@Inheritedは@Target(ElementType.TYPE)タイプのannotationのみに有効であり、classの継承のみに対してinterfaceの継承は無効である.
Annotationの最初のステップを定義する方法をまとめ、@interfaceで注釈を定義します.第2歩、パラメータ、デフォルト値を追加します:最もよく使われるパラメータをvalue()と定義して、すべてのパラメータができるだけデフォルト値を設定することをお勧めします;ステップ3では、@Targetと@Retentionを設定する必要があるメタ注釈で注釈を構成します.通常、@RetentionはRUNTIMEに設定されます.なぜなら、カスタマイズされた注釈は通常、実行期間中に読み取る必要があるからです.一般的に@Inheritedと@Repeatableを書く必要はありません.
注釈の処理
運転期間中にRUNTIMEタイプの注記を反射して読み取ることができます.@Retention(RetentionPolicy.RUNTIME)を漏らさないように注意してください.そうしないと、運転期間はこの注記を読み取ることができません.
注記をプログラムで処理することで、次の機能を実現できます.
ちょっとこまごましたので、使うときに見てください.詳細は注釈の処理を参照してください.サイトの原文のコメントを読むと、収穫があります.