annotation+java 入門

來源:互聯網
上載者:User

標籤:zha   使用   print   dal   pre   成功   one   區別   over   

 參考 thinking in java 4th

概念

註解(也被稱為中繼資料),為我們在代碼中添加資訊提供了一種形式化的方法,使我們可以在稍後某個記錄檔系統非常方便地使用這些資料。

java5內建了三種定義在java.lang中的註解:

@override 表示當前方法將覆蓋超類中的方法

@Deprecated 使用該註解後編輯器會發出警告

@SuppressWarining 將不當的警告關閉

定義註解

1.元註解:定義註解時,會需要一些元註解,可以理解為註解的最基礎的單位,java的元註解如下所示:

2.元素:在註解中,一般都會包括一些元素以表示某些值當分析處理註解時,可以利用這些值。註解的元素看起來像是介面的方法,唯一的區別是你可以為其指定預設值。註解元素的可用類型如下:

  • 所有基本類型(int,float,boolean)
  • String
  • Class
  • enum
  • Annotation
  • 以上類型的數組

*沒有元素的註解稱為標記註解

*如果使用其他類型,編譯器會報錯

 

舉個例子,以下是一個簡單的註解,該註解包含一個元素:name,該元素有一個default值:annoy,代碼如下:

package annotation.person;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * Created by zuzhaoyue on 18/5/21. */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface Person {    public String name() default "annoy";}

3.使用

註解的使用表現為索引值對的形式,樣本如下:

package annotation.person;import annotation.person.Person;/** * Created by zuzhaoyue on 18/5/21. */public class PersonUtils {    @Person(name = "肉肉")    private String employee;    @Person(name = "虎虎俠")    private String boss;    private String lolo;}

 

編寫註解處理器

如果沒有用來讀取註解的工具,那註解和注釋就差不多了。使用註解的過程中,很重要的一部分就是建立與使用註解處理器。下面是一個簡單的註解處理器,我們用它來讀取PersonUtil類,並用反射機制的getAnnotation()方法來尋找@Person標記,代碼如下:

package annotation.person;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * Created by zuzhaoyue on 18/5/21. */public class PersonTracker {    public static void track(List<String> names, Class clazz){        for(Field field:clazz.getDeclaredFields()){            Person person = field.getAnnotation(Person.class);            if(person != null){                System.out.println("找到名叫" + person.name() + "的人!他是一名" + field.getName());                names.remove(person.name());            }        }        if(names != null && names.size() > 0){            for(String name : names){                System.out.println("沒找到名叫" + name + "的人~");            }        }    }    public static void main(String args[]){        List<String> names = new ArrayList<>();        Collections.addAll(names,"肉肉","大扣","虎虎俠");        track(names, PersonUtils.class);    }}

這個程式用了兩個反射方法:getDeclaredFields()和getAnnotation(),整體思路很清晰:

1.利用java反射獲得PersonUtil類的所有field

2.遍曆PersonUtil的field,找到有註解為person的field,然後列印出來,並將它從總的name list中刪除

3.列印剩下的沒找到的名稱

測試

執行PersonTracker的main()方法,控制台顯示如下:

調試成功

 

annotation+java 入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.