Java注釈はできませんか?アリアーキテクチャは7分で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には以下の『元注解』があります.
  • @Target:注釈の作用目標
  • @Retention:注釈のライフサイクル
  • @Documented:注記JavaDocドキュメントに含めるべきかどうか
  • @Inherited:サブクラスが注釈
  • を継承することを許可するかどうか
    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は列挙され、メンバーは次のようになります.
  • 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現在の注釈のライフサイクルを示す
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.ANNOTATION_TYPE)
    public @interface Retention {
        /**
            * Returns the retention policy.
            * @return the retention policy
            */
        RetentionPolicy value();
    }
    

    注記:RetentionPolicyデータを受信します.RetentionPolicyは列挙され、メンバーは次のとおりです.
  • RetentionPolicy.SOURCE:現在の注釈コンパイル期間は表示され、classファイル
  • には書き込まれません.
  • RetentionPolicy.CLASS:クラスロードフェーズが破棄され、classファイル
  • に書き込まれます.
  • RetentionPolicy.RUNTIME:永久保存、反射可能
  • 三.JAVAの内蔵三大注釈
  • @Override
  • @Deprescated識別クラスまたはメソッドは、
  • の使用を推奨しません.
  • @SuppressWarningsは主にjavaの警告
  • を抑えるために使用されます.
    四.自分の注釈を実現する
    注記を定義します.
    @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注釈の基本原理を学びます