Retention注解


@Retention --表示其被修饰的注解保留的时间
1 进入源码:

public @interface Retention {
    RetentionPolicy value();
}

可见,其有一个属性value。进入RetentionPolicy:

public enum RetentionPolicy {
   SOURCE,
   CLASS,
   RUNTIME
}

(1)可知value值有三个,SOURCE代表被@Retention修饰的注解只在源码阶段保留,不会被编译。用于做一些检查性的操作,比如 @Override 和 @SuppressWarnings(压制程序中出来的警告)
(2)CLASS代表可以被编译而生成.class文件,但不会被JVM执行,如果一个注解上没有写@Retention这个注解,则默认为@Retention(RetentionPolicy.CLASS)
,用在当编译时进行一些预处理操作,如生成一些辅助代码。
(3)RUNTIME代表可以被JVM执行,当需要在运行时动态获取注解信息(比如通过反射)时选择此策略。如@Deprecated,用来表示某个类或属性或方法已经过时,不想别人再用时,前用@Retention (RetentionPolicy.RUNTIME)修饰。
2 通过源码可以看到,@Retention注解上有一行@Target(ElementType.ANNOTATION_TYPE)修饰,表明他只可以用来修饰注解。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容