Retention注解

2018-05-13  本文已影响0人  哈喽沃尔德

@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)修饰,表明他只可以用来修饰注解。

上一篇 下一篇

猜你喜欢

热点阅读