Java 注釋類之常用元注解
自定義Java注釋類時,我們使用方式如下:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
class @interface Author{
publicString name();
publicString company();
}
這次我們重點討論修飾注解的注解,也就是我們說的元注解。
@Retention
注解@Retention可以用來修飾注解,是注解的注解,稱為元注解
。
Retention注解有一個屬性value,是RetentionPolicy類型的,Enum RetentionPolicy是一個枚舉類型,
這個枚舉決定了Retention注解應該如何去保持,也可理解為Rentention 搭配 RententionPolicy使用。
RetentionPolicy有3個值:CLASS
,RUNTIME
,SOURCE
- 用@Retention(RetentionPolicy.CLASS)修飾的注解,表示注解的信息被保留在class文件(字節碼文件)中當程序編譯時,但不會被虛擬機讀取在運行的時候;
- 用@Retention(RetentionPolicy.SOURCE )修飾的注解,表示注解的信息會被編譯器拋棄,不會留在class文件中,注解的信息只會留在源文件中;
- 用@Retention(RetentionPolicy.RUNTIME )修飾的注解,表示注解的信息被保留在class文件(字節碼文件)中當程序編譯時,會被虛擬機保留在運行時,
所以他們可以用反射的方式讀取。
RetentionPolicy.RUNTIME 可以讓你從JVM中讀取Annotation注解的信息,以便在分析程序的時候使用.
@Target
注解@Target也是用來修飾注解的元注解。
它有一個屬性ElementType也是枚舉類型,值為:ANNOTATION_TYPE
,CONSTRUCTOR
,FIELD
,LOCAL_VARIABLE
,METHOD
,PACKAGE
,PARAMETER
,TYPE
如@Target(ElementType.METHOD) 修飾的注解表示該注解只能用來修飾在方法上。
其他同理。
Written with WENHAO.