java 元註解以及如何自定義註解的實現

分類:java基礎->元註解java

demo源碼地址git

首先說明下,java 註解是在jdk1.5 以後出現的github

jdk1.5版本內置了三種標準的註解:編輯器

@Override,表示當前的方法定義將覆蓋超類中的方法。ide

@Deprecated,使用了註解爲它的元素編譯器將發出警告,由於註解@Deprecated是不同意使用的代碼,被棄用的代碼。工具

@SuppressWarnings,關閉不當編輯器警告信息。繼承

Java還提供了4中元註解,專門負責新註解的建立: 這就是要用的願註解(用於定義註解的註解)接口

java 元註解定義:用於定義註解的註解,就是你想自定義註解要使用的註解生命週期

  • 1.@Target


@Target 表示該註解用於什麼地方,可能的值在枚舉類 ElemenetType 中,包括: ElemenetType.CONSTRUCTOR----------------------------構造器聲明 ElemenetType.FIELD --------------------------------------域聲明(包括 enum 實例) ElemenetType.LOCAL_VARIABLE------------------------- 局部變量聲明 ElemenetType.METHOD ----------------------------------方法聲明 ElemenetType.PACKAGE --------------------------------- 包聲明 ElemenetType.PARAMETER ------------------------------參數聲明 ElemenetType.TYPE--------------------------------------- 類,接口(包括註解類型)或enum聲明文檔


  • 2.@Retention


@Retention 表示在什麼級別保存該註解信息。可選的參數值在枚舉類型 RetentionPolicy 中,包括:

RetentionPolicy.SOURCE ---------------------------------註解將被編譯器丟棄 RetentionPolicy.CLASS -----------------------------------註解在class文件中可用,但會被VM丟棄 RetentionPolicy.RUNTIME VM-------將在運行期也保留註釋,所以能夠經過反射機制讀取註解的信息。

首 先要明確生命週期長度 SOURCE < CLASS < RUNTIME ,因此前者能做用的地方後者必定也能做用。通常若是須要在運行時去動態獲取註解信息,那隻能用 RUNTIME 註解;若是要在編譯時進行一些預處理操做,好比生成一些輔助代碼(如 ButterKnife),就用 CLASS註解;若是隻是作一些檢查性的操做,好比 @Override 和 @SuppressWarnings,則可選用 SOURCE 註解。


  • 3.@Document


@Documented 將此註解包含在 javadoc 中 ,它表明着此註解會被javadoc工具提取成文檔。在doc文檔中的內容會由於此註解的信息內容不一樣而不一樣。至關與@see,@param 等。


  • 4.@Inherited


@Inherited 容許子類繼承父類中的註解。


自定義註解實現見源碼

相關文章
相關標籤/搜索