我试图了解Java 1.5中的保留策略。但没有得到清晰的图片。
作为per JavaDoc,
CLASS
- 注释将由类记录在类文件中
编译器,但在运行时不需要由VM保留。RUNTIME
- 注释将由类记录在类文件中
编译器并在运行时由VM保留,因此可以读取它们
反射性。SOURCE
- 编译器将删除注释答案 0 :(得分:6)
SOURCE
注释仅出现在源文件中。
当编译器“丢弃”注释时,它实际上忽略了注释甚至存在。源注释基本上与注释代码具有相同的目的。
答案 1 :(得分:3)
带注释的元素不受影响。
@Retention
就是您所谓的元注释:仅适用于其他注释接口。因此,仅会影响它应用的注释。
例如,如果您有一个名为@Foo
的注释本身使用@Retention(RetentionPolicy.SOURCE)
注释,那么@Foo
注释(在另一个元素上)将被解析由编译器,但 not 存储在生成的.class
文件中(因此,如果您询问运行时元素是否具有@Foo
注释,则会得到否定的回答)。
如果您纯粹出于文档目的使用注释,或者想要使用注释处理(在编译步骤中)处理注释,这将非常有用。
答案 2 :(得分:0)
在Java编程语言中,注释可以用作源代码中特殊形式的语法元数据。 可以注释类,方法,变量,参数和包。注释可以嵌入到编译器生成的类文件中,并且可以由Java虚拟机保留,从而影响应用程序的运行时行为。
保留策略确定应丢弃注释的位置。 具有保留策略的注释RUNTIME将通过运行时提供给JVM。