1. 最も一般的な注釈
•@Override: このメソッドが親クラスをオーバーライドすることを他のメソッドに伝えるためにメソッドで使用されます。
•@Deprecated: 他の人は古い API を使用しないことをお勧めします。古い API はコンパイル中に警告メッセージを生成し、プログラム内のすべての要素に設定できます。
•@SuppressWarnings: 一部の警告メッセージを一時的にオフにします。
•@Entity: このクラスが永続クラスであることを示します。
2. 独自の注釈をデザインする
話す前にまずコードを読んでください
1. パラメータを 1 つだけ使用したアノテーションの実装
次のようにコードをコピーします。
パッケージ chb.test.annotation;
インポート java.lang.annotation.Documented;
java.lang.annotation.ElementType をインポートします。
インポート java.lang.annotation.Retention;
インポート java.lang.annotation.RetentionPolicy;
インポート java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@文書化されました
パブリック @interface MyAnnotation1 {
文字列値();
}
2. 2 つのパラメータを使用したアノテーションの実装
次のようにコードをコピーします。
パッケージ chb.test.annotation;
インポート java.lang.annotation.Documented;
java.lang.annotation.ElementType をインポートします。
インポート java.lang.annotation.Retention;
インポート java.lang.annotation.RetentionPolicy;
インポート java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@文書化されました
パブリック @interface MyAnnotation2 {
文字列の説明();
ブール値 isAnnotation();
}
3. アノテーション実験授業
次のようにコードをコピーします。
パッケージ chb.test.annotation;
@MyAnnotation1("これは注釈1です")
パブリック クラス AnnotationDemo {
@MyAnnotation2(description="これは注釈 2 です",isAnnotation=true)
public void SayHello(){
System.out.println("hello world!");
}
}
4.アノテーションテスト記述クラス
次のようにコードをコピーします。
パッケージ chb.test.annotation;
java.lang.reflect.Methodをインポートします。
org.junit.Test をインポートします。
パブリック クラス TestAnnotation {
@テスト
public void test() は ClassNotFoundException、SecurityException、NoSuchMethodException{ をスローします
Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
ブール値フラグ = cls.isAnnotationPresent(MyAnnotation1.class);
if(フラグ){
System.out.println("アノテーションとなるクラスを判定する");
MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
System.out.println(annotation1.value());
}
メソッド method = cls.getMethod("sayHello");
フラグ = メソッド.isAnnotationPresent(MyAnnotation2.class);
if(フラグ){
System.out.println("判定方法もアノテーション");
MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());
}
}
}
実験の結果、コンソールには次の情報が出力されました。
クラスがアノテーションであるかどうかを判断する
これは注釈1です
判定方法も注釈付き
これは注釈 2 の真です
3. はじめにと説明
1. MyAnnotation1 の @Target(ElementType.TYPE)
@Target の ElementType は、どの要素で Annotation タイプを使用できるかを指定するために使用されます。次に例を示します。
TYPE (タイプ)、FIELD (属性)、METHOD (メソッド)、PARAMETER (パラメーター)、CONSTRUCTOR (コンストラクター)、LOCAL_VARIABLE (ローカル変数)、PACKAGE (パッケージ)。TYPE (タイプ) は、クラス、インターフェイス、列挙型、および注釈型。
2. MyAnnotation1 の @Retention(RetentionPolicy.RUNTIME)
RetentionPolicy には次の 3 つの戦略があります。
•SOURCE: このアノテーション タイプの情報は、プログラムのソース コードにのみ保持されます。ソース コードがコンパイルされると、アノテーション データは消去され、コンパイルされた .class ファイルには保持されません。
•CLASS: このアノテーション タイプの情報はプログラムのソース コードとコンパイルされた .class ファイルに保持され、実行中にこの情報は JVM にロードされません。注: デフォルトの戦略は CLASS タイプです。
•RUNTIME: 情報がソース コードおよびコンパイルされた .class ファイルに保持され、この情報が実行中に JVM にロードされることを示します。
3. @MyAnnotation1 に文書化
このアノテーション情報をJAVA APIドキュメント上に表示することが目的です。@Documentedを付加しないと、該当するアノテーション情報がJAVA APIドキュメント上に表示されません。
4. MyAnnotation1 の @interface
クラスがアノテーション用に定義されていることを示すキーワード
5. MyAnnotation1 の文字列 value();
名前の値とデフォルト修飾子としてのアクセス権を持つメンバーパラメータがあることを示します。次の 2 つの点に注意してください。
•アクセス権はpublicおよびdefault(デフォルト)でのみ変更できます。
•パラメータメンバーは、byte、short、char、int、long、float、double、boolean の 8 つの基本データ型と、String、Enum、Class、注釈、およびこれらの型の配列などのデータ型のみを使用できます。
6. AnnotationDemo の @MyAnnotation1("this is annotation1")
MyAnnotation1 にはパラメーターが 1 つしかないため、かっこ内に値を直接記述することができます。注: アノテーションにパラメータが 1 つしかない場合は、パラメータ名を値として定義することをお勧めします。
TestAnnotation の 7.cls.isAnnotationPresent(MyAnnotation1.class)
クラスが MyAnnotation1 のアノテーションを使用するかどうかを判断します。
8. TestAnnotation の MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class)
MyAnnotation1 のこのクラスのアノテーションを返します。
9. TestAnnotationのmethod.isAnnotationPresent(MyAnnotation2.class)
メソッドが MyAnnotation2 のアノテーションを使用するかどうかを判断します。