首頁  >  文章  >  Java  >  對於Java中常使用的註解,你都是怎麼實現的?

對於Java中常使用的註解,你都是怎麼實現的?

php是最好的语言
php是最好的语言原創
2018-07-27 09:29:191355瀏覽

“Java”你知道我們常用的Java註解,是怎麼實現的嗎?註解相當於是標記,它與註釋的差別在於註解的內容可以可以使用,下面,讓我們認識Java的註解。

要使用註解,我們可以分成三個部分,分別是:註解本身、註解使用類別、註解處理類,如下圖:圖片描述

註解的結構

下面,我們來看看程式碼怎麼操作吧

第一步:新註解
新建兩個註解,分別是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() default "";

}

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() default Color.Blue;

int number() default 7;

int age();

String club() default "曼徹斯特聯隊";

}

#第二步驟:定義實體類,並使用剛新建的註解
新建一個FootballPlayer類別

FootballPlayer:

public class FootballPlayer {

//將PlayerName註解綁定在實體類別的name屬性中

@PlayerName("魯尼")

public String name;

//將PlayerInfor註解綁定在實體類別的playInfo屬性中

@PlayerInfor(color=Color.Red,number=10,age=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;

}

}

第三步:定義註解處理類,處理實體類別的註解
新建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() ",年齡:" infor.age());

}

#}

}

}


第四步:呼叫處理類別的處理方法

public static void main(String[] args) {

AnnoUtil.getPlayerInfo(FootballPlayer.class);

}

輸出結果如下:

運動員名字:魯尼

所屬球隊:曼徹斯特聯隊,代表顏色:Red,號碼:10,年齡:30

從以上程序可以理解為:實體類別與註解的關係就像文章與筆記,而註解處理類別就像是人;人讀了帶有筆記的文章,加以分析處理,輸出想要表達的結果。


附:

Java中提供了四個元註解,專門負責註解其他的註解,分別如下

@Retention元註解,表示需要在什麼層級保存該註解資訊(生命週期)。可選的RetentionPoicy參數包括:

RetentionPolicy.SOURCE: 停留在java來源文件,編譯器被丟掉

RetentionPolicy.CLASS:停留在class檔案中,但會被VM丟棄(預設)

RetentionPolicy.RUNTIME:記憶體中的字節碼,VM會在運行時也保留註解,因此可以透過反射機制讀取註解的資訊

@Target元註解,預設值為任何元素,表示該註解用於什麼地方。可用的ElementType參數包括

ElementType.CONSTRUCTOR: 建構器宣告

ElementType.FIELD: 成員變數、物件、屬性(包括enum實例)

ElementType.LOCAL_VARIABLE: 局部變數宣告

ElementType.METHOD: 方法宣告

ElementType.PACKAGE: 套件宣告

ElementType.PARAMETER: 參數宣告

ElementType.TYPE: 類別、介面(包括註解類型)或enum宣告

@Documented將註解包含在JavaDoc中

@Inheried允許子類別繼承父類別中的註解 [1]: /img/bVbekSZ## #

我剛整理了一套2018最新的0基礎入門和進階教程,無私分享,加Java學習qun :678-241-563 即可獲取,內附:開發工具和安裝包,以及系統學習路線圖。

相關文章:

總結java中最常用的幾個註解

Java註解教學課程及自訂註解

相關影片:

全面解析Java註解

以上是對於Java中常使用的註解,你都是怎麼實現的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn