跟王老師學註解(三):元註解

跟王老師學註解(三):元註解

主講教師:王少華   QQ羣號:483773664

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


一、@Target

(一)簡介

  • 用於指定被修飾的註解能用於修飾哪些程序元素

  • @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註解的使用。















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章