12.4.2 指定保留策略
在进一步介绍注解之前,有必要讨论一下注解保留策略。保留策略决定了在什么位置丢弃注解。Java定义了3种策略,它们被封装到java.lang.annotation.RetentionPolicy枚举中。这3种策略分别是SOURCE、CLASS和RUNTIME。
使用SOURCE保留策略的注解,只在源文件中保留,在编译期间会被抛弃。
使用CLASS保留策略的注解,在编译时被存储到.class文件中。但是,在运行时通过JVM不能得到这些注解。
使用RUNTIME保留策略的注解,在编译时被存储到.class文件中,并且在运行时可以通过JVM获取这些注解。因此,RUNTIME保留策略提供了最永久的注解。
注意:
局部变量的注解不能存储在.class文件中。
保留策略是通过Java的内置注解——@Retention指定的,它的一般形式如下所示:
- @Retention(retention-policy)
其中,retention-policy必须是上面讨论的枚举常量之一。如果没有为注解指定保留策略,将使用默认策略CLASS。
下面版本的MyAnno使用@Retention指定了RUNTIME保留策略。因此,在程序执行期间通过JVM可以获取MyAnno。