元注解,是用來修飾其他的注解定義。java.lang.annotation包下提供了4個元注解,分别是@Target注解、@Retention注解、@Documented注解以及@Inherited注解。
用于指定被修飾的注解能用于修飾哪些程式元素
@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注解描述了被其修飾的注解是否被編譯器丢棄或者保留在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用于指定被修飾的注解将被javadoc工具提取成文檔。
如果定義注解時使用了@Documented修飾,則所有使用該注解修飾的程式元素的API文檔中都将包含該注解說明。
@Documented注解類型中沒有成員變量
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
<code>package</code> <code>cn.net.imentors;</code>
<code>import</code> <code>javax.annotation.Resources;</code>
<code>/**</code>
<code> </code><code>* 程式入口</code>
<code> </code><code>* @author wangsh</code>
<code> </code><code>* @createDate:2016年6月1日</code>
<code> </code><code>* @version:v1.0</code>
<code> </code><code>* 功能描述:</code>
<code> </code><code>*/</code>
<code>@Resources</code><code>({})</code>
<code>public</code> <code>class</code> <code>JavadocTest {</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args)</code>
<code> </code><code>{</code>
<code> </code><code>System.out.println(</code><code>"hello!javadoc"</code><code>);</code>
<code> </code><code>}</code>
<code>}</code>
<code>public</code> <code>class</code> <code>Person {</code>
<code> </code><code>/**</code>
<code> </code><code>* age屬性</code>
<code> </code><code>*/</code>
<code> </code><code>public</code> <code>int</code> <code>age;</code>
<code> </code><code>public</code> <code>int</code> <code>count;</code>
<code> </code><code>public</code> <code>Person() {</code>
<code> </code><code>}</code>
<code>D:\>javadoc -d d:\api -sourcepath d:\src -subpackages cn.net.imentors -version -author</code>
@Inherited注解用于指定被修飾的注解将具有繼承性。
如果某個類使用了定義時被@Inherited修飾的注解,則其子類會自動具有這個注解。
允許子類繼承父類的注解
留到下一節,再給大家舉例說明@Inherited注解的使用。
來自為知筆記(Wiz)