天天看點

跟王老師學注解(三):元注解跟王老師學注解(三):元注解一、@Target二、@Retention注解三、@Documented注解

元注解,是用來修飾其他的注解定義。java.lang.annotation包下提供了4個元注解,分别是@Target注解、@Retention注解、@Documented注解以及@Inherited注解。

跟王老師學注解(三):元注解跟王老師學注解(三):元注解一、@Target二、@Retention注解三、@Documented注解

用于指定被修飾的注解能用于修飾哪些程式元素

@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的源碼

跟王老師學注解(三):元注解跟王老師學注解(三):元注解一、@Target二、@Retention注解三、@Documented注解

@Retention注解描述了被其修飾的注解是否被編譯器丢棄或者保留在class檔案中。預設情況下,注解被儲存在class檔案中,但在運作時并不能被反射通路。

@Rentention包含一個RetentionPolicy類型的value成員變量,其取值來自java.lang.annotation.RetentionPolicy的枚舉類型值,有如下3個取值:

RetentionPolicy.CLASS(預設值):編譯器将把注解記錄在class檔案中,當運作Java程式時,Java程式時,Java虛拟機不再保留注解

RetentionPolicy.RUNTIME:編譯器将把注解記錄在class檔案中,當運作Java程式時,Java虛拟機也會保留注解,程式可以通過反射擷取該注解

RetentionPolicy.SOURCE 編譯器将直接丢棄被修飾的注解

跟王老師學注解(三):元注解跟王老師學注解(三):元注解一、@Target二、@Retention注解三、@Documented注解

由于@SuppressWarning的作用隻是取消編譯期的警告,是以@SuppressWarning不需要儲存。

跟王老師學注解(三):元注解跟王老師學注解(三):元注解一、@Target二、@Retention注解三、@Documented注解

@Documented用于指定被修飾的注解将被javadoc工具提取成文檔。

如果定義注解時使用了@Documented修飾,則所有使用該注解修飾的程式元素的API文檔中都将包含該注解說明。

@Documented注解類型中沒有成員變量

跟王老師學注解(三):元注解跟王老師學注解(三):元注解一、@Target二、@Retention注解三、@Documented注解
跟王老師學注解(三):元注解跟王老師學注解(三):元注解一、@Target二、@Retention注解三、@Documented注解
跟王老師學注解(三):元注解跟王老師學注解(三):元注解一、@Target二、@Retention注解三、@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:\&gt;javadoc -d d:\api -sourcepath d:\src -subpackages cn.net.imentors -version -author</code>

@Inherited注解用于指定被修飾的注解将具有繼承性。

如果某個類使用了定義時被@Inherited修飾的注解,則其子類會自動具有這個注解。

允許子類繼承父類的注解

留到下一節,再給大家舉例說明@Inherited注解的使用。

來自為知筆記(Wiz)

繼續閱讀