元數據從metadata一詞譯來就是關於數據的數據的意思越來越的開源框架都提供了元數據支持了其實也就是注釋支持今天系統學習一下Java注釋(Java元數據)本文內容不限於Javadoc的注釋
什麼是Java元數據有什麼作用?
元數據就是關於數據的數據功能也有很多啦你可能用過Javadoc的注釋自動生成文檔這就是元數據功能的一種總的來說元數據可以用來創建文檔跟蹤代碼的依賴性執行編譯時格式檢查代替已有的配置文件(如Hibernate也提供了注釋配置)
注釋有中基本類型
a標記注釋 沒有變量只有名稱標識例如 @annotation
b單一值注釋 在標記注釋的基礎上提供一段數據如 @annotation(data)
c完整注釋 可以包括多個數據成員每個數據成員由名稱和值構成
@annotation(val=dataval=data)
Java的注釋
Java中提供個內置注釋類型
a Override 只能用於方法(不能用於類包聲明或者其他構造)
作用可以保證編譯時候Override函數的聲明正確性
用法@Override
public void fun(){}
bDeprecated 同樣只能作用與方法
作用對不應再使用的方法進行注解
用法@Deprecated public void fun{} //它們說這個注釋跟函數要同一行
cSupressWarnings 可以注釋一段代碼
作用關閉特定的警告信息例如你在使用泛型的時候未指定類型
用法 @SupressWarnings(value={unchecked})
代碼
Java中還提供了四種元注釋專門負責注釋其他的注釋
@Target 表示該注釋可以用於什麼地方可用的ElementType參數包括
CONSTRUCTOR : 構造器的聲明
FIELD : 域聲明(包括enum實例)
LOCAL_VARIABLE : 局部變量聲明
METHOD : 方法聲明
PACKAGE : 包聲明
PARAMETER : 參數聲明
TYPE : 類接口 (包括注解類型) 或enum聲明
@Retention 表示需要在什麼級別保存該注釋信息可選的RetentionPoicy參數包括
SOURCE : 注釋將被編譯器丟掉
CLASS : 注釋在class文件中可用但會被VM丟棄
RUNTIME : VM將在運行時也保留注釋因此可以通過反射機制讀取注釋的信息
@Documented 將注釋包含在JavaDoc中
@Inheried 允許子類繼承父類中的注釋
在Java中定義自己的注釋
Java語言支持一種新的類型——注釋類型(annotation type)跟普通類差不多在類中以符號( @ )的形式注釋其他 Java 代碼
下面將通過一個簡單的例子來實現(代碼是Brett McLaughlin 的)
@interface 申明
i簡單的注釋類型
package comoreillytigerch; /** * Marker annotation to indicate that a method or class * is still in progress */ public @interface InProgress { }
ii使用定制的注釋類型
@comoreillytigerchInProgress public void calculateInterest(float amoutfloat rate) { //Need to finish this method later }
iii添加成員
package comoreillytigerch; /** * Marker annotation to indicate that a method or class * is still in progress */ public @interface InProgress { String value(); } @comoreillytigerchInProgress @TODO(Figure out the amount of interest per month) //或者@TODO(value=Figure out the amount of interest per month) public void calculateInterest(float amountfloat rate) { }
iv設置默認值
package comoreillytigerch; public @interface GroupTODO { public enum Serverity { CRITICALIMPORTANTIRIVIALDOCMENTATION }; Severity severity() default SeverityIMPORTANT; String item (); String assignedTo(); String dateAssigned(); } }
v使用默認值
@comoreillytigerchInProgress @GroupTODO( item=Figure out the amount of interest per month assignedTo = Brett McLaughlin dateAssigned = // ) public void calculateInterest(float amount float rate) { //Need to finish this method later }
vi改寫默認值
@comoreillytigerchInProgress @GroupTODO { severity = GroupTODOSeverityDOCUMENTATION item = Need to explain how this rather unusal method works assignedTo = Jon Stevens dateAssigned = // }
這樣就對Java元數據/Java注釋進行了總結
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26797.html