1. 程式人生 > >Java註解Retention、Documented、Target的含義

Java註解Retention、Documented、Target的含義

policy 所有 AD parameter 重點 信息 ted 存在 通過

技術分享圖片

Retention註解

Retention(保留)註解說明,這種類型的註解會被保留到那個階段. 有三個值:
1.RetentionPolicy.SOURCE —— 這種類型的Annotations只在源代碼級別保留,編譯時就會被忽略
2.RetentionPolicy.CLASS —— 這種類型的Annotations編譯時被保留,在class文件中存在,但JVM將會忽略
3.RetentionPolicy.RUNTIME —— 這種類型的Annotations將被JVM保留,所以他們能在運行時被JVM或其他使用反射機制的代碼所讀取和使用.

下面示例中, @Retention(RetentionPolicy.RUNTIME)註解表明 Test_Retention註解將會由虛擬機保留,以便它可以在運行時通過反射讀取.

Documented 註解

Documented 註解表明這個註解應該被 javadoc工具記錄. 默認情況下,javadoc是不包括註解的. 但如果聲明註解時指定了 @Documented,則它會被 javadoc 之類的工具處理, 所以註解類型信息也會被包括在生成的文檔中.(個人觀點:不是重點,了解即可。勿噴)

Target註解

@Target說明了Annotation所修飾的對象範圍:Annotation可被用於 packages、types(類、接口、枚舉、Annotation類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch參數)。在Annotation類型的聲明中使用了target可更加明晰其修飾的目標。
作用:用於描述註解的使用範圍(即:被描述的註解可以用在什麽地方)
取值(ElementType)有:

1.CONSTRUCTOR:用於描述構造器
2.FIELD:用於描述域
3.LOCAL_VARIABLE:用於描述局部變量
4.METHOD:用於描述方法
5.PACKAGE:用於描述包
6.PARAMETER:用於描述參數
7.TYPE:用於描述類、接口(包括註解類型) 或enum聲明

Inherited 註解

這是一個稍微復雜的註解類型. 它指明被註解的類會自動繼承. 更具體地說,如果定義註解時使用了 @Inherited 標記,然後用定義的註解來標註另一個父類, 父類又有一個子類(subclass),則父類的所有屬性將被繼承到它的子類中.

Java註解Retention、Documented、Target的含義