@Retention是元注解,可修饰注解,即是控制注解生命周期的注解。
@Retention有类型值,RetentionPolicy类型,Enum RetentionPolicy是枚举类型
@Retention是通过RetentionPolicy .SOURCE, .CLASS, .RUNTIME 来确定注解的生命周期
RetentionPolicy .SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
什么时候使用SOURCE、CLASS、RUNTIME?
只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings, 使用SOURCE 注解,
需要在编译时做一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解,
需要在运行时去动态获取注解信息,用 RUNTIME 注解,比如@Deprecated,使用RUNTIME注解。
@Target({ElementType.TYPE}) 注解
ElementType 这个枚举类型的常量提供了一个简单的分类:注释可能出现在Java程序中的语法位置(这些常量与元注释类型(@Target)一起指定在何处写入注释的合法位置)