ホームページ  >  記事  >  Java  >  Java で一般的に使用されるアノテーションはどのように実装しますか?

Java で一般的に使用されるアノテーションはどのように実装しますか?

php是最好的语言
php是最好的语言オリジナル
2018-07-27 09:29:191372ブラウズ

「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 アノテーションの包括的な分析

以上がJava で一般的に使用されるアノテーションはどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。