ホームページ >Java >&#&チュートリアル >Java で一般的に使用されるアノテーションはどのように実装しますか?
「Java」 私たちがよく使うJavaのアノテーションがどのように実装されているかご存知ですか?アノテーションはタグに相当します。アノテーションとの違いは、アノテーションの内容を使用できることです。次に、Java アノテーションについて説明します。
注釈を使用するには、以下に示すように、注釈自体、注釈使用クラス、および注釈処理クラスの 3 つの部分に分割できます。 画像の説明
注釈の構造
さて、どのように機能するかを見てみましょう。コードは動作します
ステップ 1: 新しいアノテーションを作成します
2 つの新しいアノテーション、つまり PlayerName と PlayerInfor を作成します
PlayerName:
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java .lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@ Documented
public @interface PlayerName {
String value() デフォルト "";
}
PlayerInfor:
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang .annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface PlayerInfor {
public enum Color{Blue,Red,White};
Color color() デフォルト Color.Blue;
int number() デフォルト 7;
int age();
String club ()default "Manchester United";
}
ステップ 2: エンティティ クラスを定義し、新しく作成したアノテーションを使用する
新しい FootballPlayer クラスを作成する
FootballPlayer:
public class FootballPlayer {
//Annotate PlayerName エンティティクラスの name 属性にバインド
@PlayerName("Rooney")
public String name;
//PlayerInfor アノテーションをエンティティクラスの playInfo 属性にバインド
@PlayerInfor(color=Color.赤、番号=10、年齢=30)
public String playInfo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPlayInfo() {
return playInfo;
}
public void setPlayInfo(String playInfo) {
this.playInfo = playInfo;
}
}
ステップ 3:注釈処理クラス、エンティティ クラスのアノテーションの処理
新しい AnnoUtil ツール クラス
AnnoUtil:
import java.lang.reflect.Field;
public class AnnoUtil {
public static void getPlayerInfo(Class> clazz){
/エンティティクラスのすべての属性を取得します/
Field[]fields = clazz.getFields();
//エンティティクラス属性のアノテーションを抽出するループ
for(Field field:fields){
// アノテーションと一致
if(field.isAnnotationPresent(PlayerName.class)){
//アノテーションを取得
PlayerName name = field.getAnnotation(PlayerName.class);
//アノテーションを使用
System.out. println( "選手名: "+name.value());
}else if(field.isAnnotationPresent(PlayerInfor.class)){
//アノテーションを取得
PlayerInfor infor = field.getAnnotation(PlayerInfor.class) ;
//アノテーションを使用する
System.out.println("チーム: "+infor.club()+"、代表色: "
+infor.color()+"、数値: "+infor.number ()+", age: "+infor.age());
}
}
}
}
ステップ4: 処理クラスの処理メソッドを呼び出す
public static void main(String[] args ) {
AnnoUtil.getPlayerInfo(FootballPlayer.class);
}
出力結果は以下の通りです:
選手名: ルーニー
チーム: マンチェスター・ユナイテッド、代表カラー: 赤、背番号: 10、年齢: 30
上記のプログラムから、エンティティクラスとアノテーションの関係は記事とメモのようなものであり、アノテーション処理クラスは人間のようなものであることがわかります。人はメモ付きの記事を読み、それを分析および処理し、結果を出力します。彼らは表現したいのです。
添付ファイル:
Java は、他のアノテーションに注釈を付ける役割を担う 4 つのメタ アノテーションを提供します。それらは、次のとおりです。
@Retention メタ アノテーションは、アノテーション情報をどのレベル (ライフ サイクル) で保存する必要があるかを示します。オプションの RetentionPolicy パラメータには以下が含まれます:
RetentionPolicy.SOURCE: Java ソース ファイルに残り、コンパイラは破棄されます。
RetentionPolicy.CLASS: クラス ファイルに残りますが、VM によって破棄されます (デフォルト)
RetentionPolicy.RUNTIME: バイトコード内のメモリ、VM は実行時にアノテーションも保持するため、アノテーション情報はリフレクション メカニズム
@Target メタアノテーションを通じて読み取ることができます。デフォルト値は、アノテーションが使用される場所を示す任意の要素です。使用可能な ElementType パラメーターには、
ElementType.CONSTRUCTOR: コンストラクター宣言
ElementType.FIELD: メンバー変数、オブジェクト、プロパティ (列挙インスタンスを含む)
ElementType.LOCAL_VARIABLE: ローカル変数宣言
ElementType.METHOD: メソッド宣言
ElementType。 PACKAGE: パッケージ宣言
ElementType.PARAMETER: パラメーター宣言
ElementType.TYPE: クラス、インターフェース (注釈タイプを含む) または enum 宣言
@Documented には JavaDoc 内の注釈が含まれます
@Inheried により、サブクラスが親の注釈から継承できるようになりますクラス [1]: /img/bVbekSZ
2018 年に最新の 0 ベースの入門および上級チュートリアルのセットをコンパイルしました。これらは、Java 学習キュー (678-241-563) を追加することで入手できます。含まれているものは次のとおりです。システム学習ロードマップも同様です。
関連記事:
Java で最も一般的に使用されるアノテーションをまとめます
Java アノテーションのチュートリアルとカスタム アノテーション
関連ビデオ:
以上がJava で一般的に使用されるアノテーションはどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。