注解@Retention可以用来修饰注解,是注解的注解,称为元注解。
Retention注释具有RetentionPolicy类型的属性value,而Enum RetentionPolicy是枚举类型。
RetentionPolicy上有CLASS RUNTIME SOURCE
按生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE :注释仅保留在源文件中,当Java文件编译为class文件时,注释将被丢弃;
2、RetentionPolicy.CLASS :注释保留在class文件中,但在jvm加载class文件时会被丢弃。 这是默认的生命周期;
3、RetentionPolicy.RUNTIME :注释不仅保存在class文件中,在jvm加载class文件后还存在;
这三个生命周期分别对应于Java源文件. Java文件、— .class文件和内存中的字节码。
那怎么来选择合适的注解生命周期呢?
首先要明确生命周期长SOURCE CLASS RUNTIME,所以前者发挥作用的地方后者也一定发挥作用。
通常,如果需要在运行时动态获取注释信息,则只能使用RUNTIME注释。 例如,@Deprecated使用RUNTIME注释
如果要执行预处理操作,例如在编译时生成辅助代码(如ButterKnife ),请使用CLASS注释。
@Override和@SuppressWarnings等,如果只是进行检查性操作的话,就使用SOURCE注释。