@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 {
}