Java注釈はできませんか?アリアーキテクチャは7分でJava注釈の基本原理を学びます
Java注釈はできませんか?アリアーキテクチャは7分でJava注釈の基本原理を学びます
一.注釈の本質
「java.lang.annotation.Annotation」インタフェースには、「注釈」を記述する言葉があります.
The common interface extended by all annotation typesのすべての注釈タイプは、この一般的なインタフェース(Annotation)から継承されています.
この言葉は少し抽象的だが、注釈の本質を話した.JDK内蔵注記の定義を見てみましょう.
これは注記@Overrideの定義ですが、本質的には:
そう、注釈の本質はAnnotationインタフェースを継承したインタフェースです.この点については、任意の注釈クラスを逆コンパイルすることができ、結果が得られます.
1つの注釈は正確な意味では、特殊な注釈にすぎず、そのコードを解析しなければ、注釈にも及ばない可能性があります.
クラスまたはメソッドを解析する注釈には、コンパイル期間の直接的なスキャンと実行期間の反射の2つの形式があることが多い.
二.メタ注釈
『メタ注釈』は注釈を修飾するための注釈であり、通常は注釈の定義に用いられる.
JAVAには以下の『元注解』があります.@Target:注釈の作用目標 @Retention:注釈のライフサイクル @Documented:注記JavaDocドキュメントに含めるべきかどうか @Inherited:サブクラスが注釈 を継承することを許可するかどうか
1. @Target
@Target注記は、その注記がどのオブジェクトに作用するかを示します.
注記:ElementType配列を受信します.ElementTypeは列挙され、メンバーは次のようになります. ElementType.TYPE:クラス、インタフェース、列挙に修飾された注釈を使用できる ElementType.FIELD:属性フィールドでの使用を許可する ElementType.METHOD:メソッドでの使用を許可する ElementType.PARAMETER:メソッドパラメータに適用可能 ElementType.CONTRUCTOR:コンストラクタでの使用を許可する ElementType.LOCAL_VARABLE:ローカルローカル変数での使用を許可する ElementType.ANNOTATION_TYPE:注釈に作用することを許可する ElementType.PACKAGE:パケットに作用することを許可する ElementType.TYPE_PARAMETER:タイプパラメータに作用可能 ElementType.TYPE_USE:使用可能なタイプ 2. @Retention
@Retention現在の注釈のライフサイクルを示す
注記:RetentionPolicyデータを受信します.RetentionPolicyは列挙され、メンバーは次のとおりです. RetentionPolicy.SOURCE:現在の注釈コンパイル期間は表示され、classファイル には書き込まれません. RetentionPolicy.CLASS:クラスロードフェーズが破棄され、classファイル に書き込まれます. RetentionPolicy.RUNTIME:永久保存、反射可能 三.JAVAの内蔵三大注釈 @Override @Deprescated識別クラスまたはメソッドは、 の使用を推奨しません.@SuppressWarningsは主にjavaの警告 を抑えるために使用されます.
四.自分の注釈を実現する
注記を定義します.
この注記を使用します.
注釈の最も重要な部分は注釈の処理にある.注記プロセッサは,反射機構により被検査方法上の注記情報を取得し,注記要素の値に基づいて特定の処理を行う.注釈プロセッサがない場合、注釈は注釈であるか、注釈にも及ばない.
この注記を処理するには、次の手順に従います.
出力結果:
Java注釈はできませんか?アリアーキテクチャは7分でJava注釈の基本原理を学びます
一.注釈の本質
「java.lang.annotation.Annotation」インタフェースには、「注釈」を記述する言葉があります.
The common interface extended by all annotation typesのすべての注釈タイプは、この一般的なインタフェース(Annotation)から継承されています.
この言葉は少し抽象的だが、注釈の本質を話した.JDK内蔵注記の定義を見てみましょう.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
これは注記@Overrideの定義ですが、本質的には:
public interface Override extends Annotation{
}
そう、注釈の本質はAnnotationインタフェースを継承したインタフェースです.この点については、任意の注釈クラスを逆コンパイルすることができ、結果が得られます.
1つの注釈は正確な意味では、特殊な注釈にすぎず、そのコードを解析しなければ、注釈にも及ばない可能性があります.
クラスまたはメソッドを解析する注釈には、コンパイル期間の直接的なスキャンと実行期間の反射の2つの形式があることが多い.
二.メタ注釈
『メタ注釈』は注釈を修飾するための注釈であり、通常は注釈の定義に用いられる.
JAVAには以下の『元注解』があります.
1. @Target
@Target注記は、その注記がどのオブジェクトに作用するかを示します.
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
/**
* Returns an array of the kinds of elements an annotation type
* can be applied to.
* @return an array of the kinds of elements an annotation type
* can be applied to
*/
ElementType[] value();
}
注記:ElementType配列を受信します.ElementTypeは列挙され、メンバーは次のようになります.
@Retention現在の注釈のライフサイクルを示す
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* Returns the retention policy.
* @return the retention policy
*/
RetentionPolicy value();
}
注記:RetentionPolicyデータを受信します.RetentionPolicyは列挙され、メンバーは次のとおりです.
四.自分の注釈を実現する
注記を定義します.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface HelloAnnotation {
String value() default "Hello annotation!";
}
この注記を使用します.
public class UseAnnotation {
@HelloAnnotation
public void hello() {
System.out.println("hello");
}
@HelloAnnotation("Hello world!")
public void helloWorld() {
System.out.println("Hello world!");
}
}
注釈の最も重要な部分は注釈の処理にある.注記プロセッサは,反射機構により被検査方法上の注記情報を取得し,注記要素の値に基づいて特定の処理を行う.注釈プロセッサがない場合、注釈は注釈であるか、注釈にも及ばない.
この注記を処理するには、次の手順に従います.
public class Test {
public static void main(String[] args) {
testAnnotation(UseAnnotation.class);
}
private static void testAnnotation(Class> cl) {
for (Method m : cl.getDeclaredMethods()) {
HelloAnnotation ha = m.getAnnotation(HelloAnnotation.class);
if (ha != null) {
System.out.println("Found My Annotation: " + ha.value());
}
}
}
}
出力結果:
Found My Annotation: Hello annotation!
Found My Annotation: Hello world!
Java注釈はできませんか?アリアーキテクチャは7分でJava注釈の基本原理を学びます