Java開発カスタムアノテーション-パワーノード

カスタムアノテーションの構文規則

1. @interfaceキーワードを使用して注釈を定義し、キーワードの場所に注意します

@interfaceカスタムアノテーションを使用する場合、java.lang.annotation.Annotationインターフェースは自動的に継承され、その他の詳細はコンパイラーによって自動的に完了されます。注釈を定義するとき、他の注釈またはインターフェースを継承することはできません。

2.メンバーは、パラメーターも例外もなしで宣言されます。一般クラスのメンバー変数の宣言の違いに注意してください。

これらの各メソッドは、実際には構成パラメーターを宣言します。メソッドの名前はパラメーターの名前です

3.上記のように、defaultを使用して、メンバーのデフォルト値を指定できます。

4.メンバータイプは制限されています。リーガルタイプには、プリミティブタイプと、String、Class、Annotation、Enumeration(JAVAには8つの基本データタイプがあります:byte(byte)、short(short integer)、int(integer type))、long(長整数)、float(単精度浮動小数点数型)、double(倍精度浮動小数点数型)、char(文字型)、boolean(ブール型)

5.アノテーションクラスにはメンバーを含めることはできません。メンバーのないアノテーションは、JDKアノテーションの@Overrideや@Deprecationなどの識別アノテーションと呼ばれます。

6.アノテーションにメンバーが1つしかなく、メンバーの名前がvalue()の場合、JDKアノテーションの@SuppviseWarningsのように、メンバー名と代入記号「=」は使用時に省略できます。メンバー名がそうでない場合値、メンバー名と割り当て番号の指定 "="、を使用する場合に必要です。
ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

メタアノテーション

メタ注釈とは何ですか?注釈の注釈、つまり、自分で定義した注釈に注釈を追加することです。自分で注釈を定義しますが、注釈にどのような機能を持たせたいですか。注釈にはメタ注釈を使用する必要があります。Java5.0は、他の注釈タイプの指示を提供するために使用される4つの標準メタ注釈タイプを定義します。

ここに画像の説明を挿入

1、@ Target

@Targetは、アノテーションによって変更されたオブジェクトのスコープを説明します。アノテーションのスコープは、アノテーションのスコープを説明するために使用されます(つまり、クラスアノテーション、メソッドアノテーション、メンバー変数アノテーションなどのアノテーションを使用できる場所)。など)

注:ターゲットメタ注釈が表示されない場合、定義された注釈はプログラムの任意の要素に適用できます。

値は列挙型java.lang.annotation.ElementTypeで指定されます。

●コンストラクター:コンストラクターを説明するために使用されます

●FIELD:フィールドを説明するために使用されます

●LOCAL_VARIABLE:ローカル変数を記述するために使用されます

●方法:方法を説明するために使用されます

●パッケージ:パッケージの説明に使用されます

●PARAMETER:パラメータを説明するために使用されます

●TYPE:クラス、インターフェース(アノテーションタイプを含む)、または列挙型ステートメントを説明するために使用されます

サンプルコード
ここに画像の説明を挿入

2、@ Retention

@Retentionは、アノテーションが保持される時間の長さを定義します。

(1)一部の注釈はソースコードにのみ表示され、コンパイラによって破棄されます。

(2)その他はクラスファイルにコンパイルされます。クラスファイルにコンパイルされた注釈は、仮想マシンによって無視される場合があります。

(3)クラスがロードされると、その他が読み取られます(注釈とクラスは使用中に分離されるため、クラスの実行には影響しませんのでご注意ください)。

このメタアノテーションを使用すると、アノテーションの「ライフサイクル」を制限できます。

@Retentionの値は、列挙型RetentionPoicyで指定されます

●SOURCE:ソースファイルで有効です(つまり、ソースファイルは保持されます)

●CLASS:クラスファイルで有効(つまり、クラス保持)

●ランタイム:実行時に有効(つまり、実行時に予約)

サンプルコードは次のとおりです。

ここに画像の説明を挿入

注:注釈付きRetentionPolicyの属性値はRUTIMEであるため、注釈プロセッサーは、実行時に何らかの論理処理を実行するために、リフレクションを通じて注釈の属性値を取得できます。

3、@文書化

@Documentedは、他のタイプのアノテーションをアノテーション付きプログラムメンバーのパブリックAPIとして使用する必要があることを説明するために使用されます。これにより、javadocなどのツールでドキュメント化できます。文書化はマーク注釈であり、メンバーはありません。

4、@継承

@Attachedメタアノテーションはマークアップアノテーションです。@ Addedは、アノテーション付きタイプが継承されることを示します。@AliExpressで変更されたアノテーションタイプがクラスで使用されている場合、このアノテーションはクラスのサブクラスで使用されます。

注:@AliExpressアノテーションタイプは、アノテーション付きクラスのサブクラスに継承されます。クラスは、実装するインターフェイスからアノテーションを継承しません。また、メソッドは、オーバーロードするメソッドからアノテーションを継承しません。

@AliExpressアノテーションでマークされたアノテーションの保持がRetentionPolicy.RUNTIMEの場合、リフレクションAPIはこの継承を強化します。java.lang.reflectを使用して@合計アノテーションタイプのアノテーションをクエリすると、リフレクションコードインスペクションが機能し始めます。指定されたアノテーションタイプが見つかるまでクラスとその親クラスをチェックするか、のトップレベルに到達します。クラス継承構造。

●定義注1

ここに画像の説明を挿入

●定義注2

ここに画像の説明を挿入

●基本クラスを定義する

ここに画像の説明を挿入

●サブクラスを定義する

ここに画像の説明を挿入

●リフレクションを通じてサブクラスで使用されるすべてのアノテーションを取得します

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_49543720/article/details/111871095