アノテーションを詳しく学ぶには、独自のアノテーションを定義して使用できるようにする必要があります。独自のアノテーションを定義する前に、Java が提供するメタ アノテーションと関連する定義アノテーションの構文を理解する必要があります。
-------------------------------------------------- ----------------------------------
メタアノテーション:
メタアノテーションの役割は、他のアノテーションに注釈を付けることです。 Java5.0 では、他のアノテーション タイプの説明を提供するために使用される 4 つの標準メタアノテーション タイプが定義されています。 Java5.0で定義されたメタアノテーション:
1.@ターゲット、
2.@保持、
3.@文書化、
4.@継承
これらの型とそれらがサポートするクラスは、java.lang.annotation パッケージにあります。各メタアノテーションの役割と、対応するサブパラメータの使用手順を見てみましょう。
-------------------------------------------------- ----------------------------------
@ターゲット:
@Target は、アノテーションによって変更されるオブジェクトのスコープについて説明します。 アノテーションは、パッケージ、型 (クラス、インターフェイス、列挙型、アノテーション型)、型メンバー (メソッド、コンストラクター、メンバー変数、列挙値)、メソッド パラメーター、およびローカル変数に使用できます (ループ変数、キャッチパラメータなど)。 Annotation タイプの宣言で target を使用すると、変更されたターゲットをより明確にできます。
機能: アノテーションの使用範囲 (つまり、記述されたアノテーションがどこで使用できるか) を記述するために使用されます。
値(ElementType)は次のとおりです。
1.CONSTRUCTOR: コンストラクターの記述に使用されます。 2.FIELD: ドメインの記述に使用されます。 3.LOCAL_VARIABLE: ローカル変数の記述に使用されます。 4.METHOD: メソッドの記述に使用されます。 5.PACKAGE: パッケージの記述に使用されます。 6.PARAMETER: 使用されます。パラメータを記述するために使用されます。 7.TYPE: クラス、インターフェイス (注釈型を含む)、または enum 宣言を記述するために使用されます。
使用例:
@Target(ElementType.FIELD)
パブリック @interface NoDBColumn {
}
-------------------------------------------------- ----------------------------------
@保持:
@Retention は、アノテーションが保持される期間を定義します。一部のアノテーションはソース コード内にのみ表示され、コンパイラによって破棄されますが、他のアノテーションはクラス ファイル内でコンパイルされ、マシンはそれらを無視します。一方、他のものはクラスがロードされるときに読み取られます (アノテーションとクラスは別々に使用されるため、クラスの実行には影響しないことに注意してください)。このメタ アノテーションを使用して、アノテーションの「ライフ サイクル」を制限します。
機能: 注釈情報をどのレベルで保存する必要があるかを示し、注釈のライフサイクルを記述するために使用されます (つまり、記述された注釈がどの範囲内で有効であるか)。
値 (RetentionPoicy) は次のとおりです。
1.SOURCE:ソースファイル内で有効(つまり、ソースファイルは保持されます)
2.CLASS: クラス ファイルで有効 (つまり、予約されたクラス)
3.RUNTIME: 実行時に有効 (つまり、実行時に保持されます)
Retention メタアノテーション タイプはメンバーとして一意の値を持ち、その値は java.lang.annotation.RetentionPolicy の列挙型の値から取得されます。具体的な例としては以下のようなものがあります。
-------------------------------------------------- ----------------------------------
@文書化:
@Documented は、アノテーションが付けられたプログラム メンバーのパブリック API として使用する必要がある他のタイプのアノテーションを記述するために使用され、したがって javadoc などのツールで文書化できます。文書化されたのはマークアップ注釈であり、メンバーはありません。
@Inherited メタアノテーションは、特定のアノテーション付き型が継承されることを示すマークアップ アノテーションです。 @Inherited で変更されたアノテーション型がクラスに使用されている場合、このアノテーションはそのクラスのサブクラスに使用されます。
注: @Inherited アノテーション タイプは、アノテーションが付けられたクラスのサブクラスによって継承されます。クラスは実装するインターフェイスからアノテーションを継承せず、メソッドはオーバーロードするメソッドからアノテーションを継承しません。
@Inherited アノテーション タイプでアノテーションが付けられたアノテーションの Retention が RetentionPolicy.RUNTIME の場合、リフレクション API はこの継承を強化します。 java.lang.reflect を使用して @Inherited アノテーション タイプのアノテーションをクエリすると、リフレクティブ コード インスペクションが機能し始めます。指定されたアノテーション タイプが見つかるまで、またはクラス継承構造の最上位レベルが見つかるまで、クラスとその親クラスがチェックされます。に達します。
コード例:
-------------------------------------------------- ----------------------------------
カスタム注釈:
@interface を使用してアノテーションをカスタマイズすると、java.lang.annotation.Annotation インターフェースが自動的に継承され、その他の詳細はコンパイラーによって自動的に完成されます。アノテーションを定義する場合、他のアノテーションやインターフェースを継承することはできません。 @interface はアノテーションの宣言に使用され、各メソッドは実際に構成パラメーターを宣言します。メソッドの名前はパラメーターの名前であり、戻り値の型はパラメーターの型です (戻り値の型は、基本型、Class、String、または enum のみにすることができます)。パラメータのデフォルト値は、default を通じて宣言できます。
注釈の形式を定義します。
public @interface アノテーション名 {定義本体}
注釈パラメータのサポートされるデータ型:
1. すべての基本データ型 (int、float、boolean、byte、double、char、long、short)
2. 文字列型 3. クラス型 4. 列挙型 5. アノテーション型 6. 上記すべての型の配列
注釈タイプでパラメータを設定する方法:
まず、このメソッドは public または default の 2 つのアクセス権でのみ変更できます。たとえば、このメソッドはデフォルトのタイプに設定されています。
次に、パラメーター メンバーは、byte、short、char、int、long、float、double、boolean の 8 つの基本データ型と、String、Enum、Class、注釈、およびこれらの型の配列などのデータ型のみを使用できます。 String value();ここでのパラメータメンバーは String です。
3 番目に、パラメーター メンバーが 1 つだけの場合は、パラメーター名を「value」に設定し、その後に括弧を付けるのが最適です。 例: 次の例の FruitName アノテーションには、パラメーター メンバーが 1 つだけあります。
簡単なカスタム注釈と注釈の使用例:
インポート java.lang.annotation.Documented;
java.lang.annotation.ElementType をインポートします。
インポート java.lang.annotation.Retention;
インポート java.lang.annotation.RetentionPolicy;
インポート java.lang.annotation.Target;
/**
※果物名の注意点
* @著者ピーダ
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@文書化されました
public @interface FruitName {
文字列値() デフォルト "";
}
インポート java.lang.annotation.Documented;
java.lang.annotation.ElementType をインポートします。
インポート java.lang.annotation.Retention;
インポート java.lang.annotation.RetentionPolicy;
インポート java.lang.annotation.Target;
/**
※果実の色の注釈
* @著者ピーダ
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@文書化されました
public @interface FruitColor {
/**
* 色の列挙
* @著者ピーダ
*
*/
パブリック列挙型 Color{BULE,RED,GREEN};
/**
* 色の属性
* @戻る
*/
Color FruitColor() のデフォルト Color.GREEN;
}
注釈をインポートします。FruitColor.Color;
パブリック クラス Apple {
@FruitName("リンゴ")
プライベート文字列 appleName;
@FruitColor(フルーツカラー=カラー.RED)
プライベート文字列 appleColor;
public void setAppleColor(String appleColor) {
this.appleColor = appleColor;
}
public String getAppleColor() {
appleColor を返します。
}
public void setAppleName(String appleName) {
this.appleName = リンゴ名;
}
public String getAppleName() {
appleName を返します。
}
public void displayName(){
System.out.println("果物の名前はリンゴです");
}
}