@Retention 介紹
Retention.java 類位於 JDK 的 rt.jar 內,屬於一個 JDK 註解
它是用來修飾註解的,是註解的註解,稱之爲元註解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
RetentionPolicy value();
}
@Retention 作用
該註解是定義被它所註解的註解保留多久,內部有一個枚舉類型的屬性 RetentionPolicy
該枚舉有 3 個可選值 SOURCE
、CLASS
、RUNTIME
public enum RetentionPolicy {
/**
* 註解保留在源文件,當 Java 文件編譯成 class 文件的時候,註解將被編譯器廢棄
*/
SOURCE,
/**
* 註解被保留到 class 文件,但在 jvm 加載 class 文件的是時候被廢棄(默認屬性)
*/
CLASS,
/**
* 註解將被記錄在由編譯器的類文件,並在運行時由虛擬機保留
*/
RUNTIME
}
@Retention 屬性選擇
- 如果需要在運行時動態獲取註解信息,只能用 RUNTIME
- 如果要在編譯時進行一些預處理操作,就用 CLASS
- 如果僅僅做一些檢查的操縱,則用 SOURCE
如下爲使用不同屬性的註解示例
@Import 註解使用 RUNTIME
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
Class<?>[] value();
}
@Immutable 註解使用 CLASS
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface Immutable {
}
@Override 註解使用 SOURCE
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}