跟王老師學註解(三):元註解
主講教師:王少華 QQ羣號:483773664
元註解,是用來修飾其他的註解定義。java.lang.annotation包下提供了4個元註解,分別是@Target註解、@Retention註解、@Documented註解以及@Inherited註解。
一、@Target
(一)簡介
用於指定被修飾的註解能用於修飾哪些程序元素
@Target註解類型有唯一的value作爲成員變量,value的類型爲java.lang.annotation.ElementType[]類型。
@Target的成員變量value爲如下值時,則可指定被修飾的註解只能按如下聲明進行標註
用於指定被修飾的註解能用於修飾哪些程序元素
@Target註解類型有唯一的value作爲成員變量,value的類型爲java.lang.annotation.ElementType[]類型。
@Target的成員變量value爲如下值時,則可指定被修飾的註解只能按如下聲明進行標註
ElementType.ANNOTATION_TYPE:被修飾的註解只能用來修飾註解
ElementType.CONSTRUCTOR:只能修飾構造方法
ElementType.FIELD:只能修飾成員變量
ElementType.LOCAL_VARIABLE:只能修飾局部變量
ElementType.METHOD:只能修飾方法聲明
ElementType.PACKAGE:只能修飾包
ElementType.PARAMETER:只能用來修飾參數
ElementType.TYPE:可以用來修飾類、接口、枚舉聲明
(二)使用方法
查看@SuppressWarning的源碼
二、@Retention註解
(一)簡介
@Retention註解描述了被其修飾的註解是否被編譯器丟棄或者保留在class文件中。默認情況下,註解被保存在class文件中,但在運行時並不能被反射訪問。
@Rentention包含一個RetentionPolicy類型的value成員變量,其取值來自java.lang.annotation.RetentionPolicy的枚舉類型值,有如下3個取值:
RetentionPolicy.CLASS(默認值):編譯器將把註解記錄在class文件中,當運行Java程序時,Java程序時,Java虛擬機不再保留註解
RetentionPolicy.RUNTIME:編譯器將把註解記錄在class文件中,當運行Java程序時,Java虛擬機也會保留註解,程序可以通過反射獲取該註解
RetentionPolicy.SOURCE 編譯器將直接丟棄被修飾的註解
(二)使用方法
由於@SuppressWarning的作用只是取消編譯期的警告,所以@SuppressWarning不需要保存。
三、@Documented註解
(一)簡介
@Documented用於指定被修飾的註解將被javadoc工具提取成文檔。
如果定義註解時使用了@Documented修飾,則所有使用該註解修飾的程序元素的API文檔中都將包含該註解說明。
@Documented註解類型中沒有成員變量
(二)使用方法
(三)javadoc命令
javadoc命令參數有50多個,這裏只簡單介紹三個參數: -d,-subpackages,-sourcepath
-d 指定API文檔的輸出目錄,默認是當前目錄。建議總是指定該參數。
-sourcepath 指定源代碼路徑,默認是當前目錄。 此參數通常是必須的。
-subpackages 以遞歸的方式處理各子包。關鍵參數!如果不使用本參數,每次只能處理一個子包(或需手工列出所有子包)。
使用參數 -author 可以將作者信息(@author ***)導出到最終生成的API文檔中, -version 可以生成版本信息。如果是自己寫的一個包,千萬不要忘了用 -author
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package cn.net.imentors; import javax.annotation.Resources; /** * 程序入口 * @author wangsh * @createDate:2016年6月1日 * @version:v1.0 * 功能描述: */ @Resources ({}) public class JavadocTest { public static void main(String[] args) { System.out.println( "hello!javadoc" ); } } |
1 2 3 4 5 6 7 8 9 | public class Person { /** * age屬性 */ public int age; public int count; public Person() { } } |
1 | D:\>javadoc -d d:\api -sourcepath d:\src -subpackages cn.net.imentors -version -author |
四、@Inherited註解
(一)簡介
@Inherited註解用於指定被修飾的註解將具有繼承性。
如果某個類使用了定義時被@Inherited修飾的註解,則其子類會自動具有這個註解。
(二)@Inherited的使用
允許子類繼承父類的註解
留到下一節,再給大家舉例說明@Inherited註解的使用。