1. 程式人生 > >自定義註解 @Target @Retention 引數含義

自定義註解 @Target @Retention 引數含義

示例:

@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    long time() default 2L;

}

 

@Target 註解

功能:指明瞭修飾的這個註解的使用範圍,即被描述的註解可以用在哪裡。

ElementType的取值包含以下幾種: 

ElementType.TYPE //類,介面或者列舉

ElementType.FIELD //域,包含列舉常量

ElementType.METHOD //方法

ElementType.PARAMETER //引數

ElementType.CONSTRUCTOR //構造方法

ElementType.LOCAL_VARIABLE //區域性變數

ElementType.ANNOTATION_TYPE //註解型別

ElementType.PACKAGE //包

ElementType.TYPE_PARAMETER //型別引數宣告(1.8)

ElementType.TYPE_USE //使用型別(1.8)

 

@Retention 註解

功能:指明修飾的註解的生存週期,即會保留到哪個階段。

RetentionPolicy的取值包含以下三種:

RetentionPolicy.SOURCE //原始碼級別保留,編譯後即丟棄。

RetentionPolicy.CLASS //編譯級別保留,編譯後的class檔案中存在,在jvm執行時丟棄,這是預設值。

RetentionPolicy.RUNTIME // 執行級別保留,編譯後的class檔案中存在,在jvm執行時保留,可以被反射呼叫。

 

@Documented 註解

功能:指明修飾的註解,可以被例如javadoc此類的工具文件化,只負責標記,沒有成員取值。

 

@Inherited註解

功能:允許子類繼承父類中的註解。