@Retention用于指定注解的生命周期,通过RetentionPolicy枚举控制其保留策略:SOURCE(仅源码)、CLASS(仅class文件)、RUNTIME(运行时可通过反射获取),默认不显式声明则为SOURCE或CLASS;若需运行时读取注解,必须使用@Retention(RetentionPolicy.RUNTIME),如自定义注解MyAnnotation并在反射中使用。
@Retention 是 Java 中的一个注解(元注解),用来指定另一个注解的生命周期,也就是这个注解信息保留到什么时候。简单来说,它控制注解在源码、编译后的 class 文件,还是运行时仍然可用。
通过 @Retention 注解的参数值(一个枚举类型 RetentionPolicy),可以设置以下三种保留策略:
当你自定义一个注解时,如果希望它能在运行时被读取,就必须用 @Retention(RetentionPolicy.R
UNTIME) 来标注。
例如:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}
这样,在程序运行时就可以通过反射获取类、方法或字段上的 MyAnnotation 注解信息。
Java 编译器默认不会保留所有注解信息。如果不显式指定 @Retention,默认行为是 SOURCE 或 CLASS,具体取决于注解用途。如果你写了一个注解,并希望在运行时通过反射来处理它,就必须明确声明为 RUNTIME,否则反射将无法获取到该注解。
基本上就这些。理解 @Retention 能帮助你正确设计自定义注解,确保它们在需要的时候“可见”。