在java 1.5中@Retention背后发生了什么

时间:2012-08-09 04:16:22

标签: java annotations

我试图了解Java 1.5中的保留策略。但没有得到清晰的图片。

作为per JavaDoc

  • CLASS - 注释将由类记录在类文件中 编译器,但在运行时不需要由VM保留。
  • RUNTIME - 注释将由类记录在类文件中 编译器并在运行时由VM保留,因此可以读取它们 反射性。
  • SOURCE - 编译器将删除注释
 
  1. "丢弃"?
  2. 是什么意思
  3. 通过使用SOURCE标记类文件是否会在其中没有特定的带注释元素?

3 个答案:

答案 0 :(得分:6)

SOURCE注释仅出现在源文件中。

当编译器“丢弃”注释时,它实际上忽略了注释甚至存在。源注释基本上与注释代码具有相同的目的。

答案 1 :(得分:3)

带注释的元素不受影响。

@Retention就是您所谓的元注释:适用于其他注释接口。因此,会影响它应用的注释

例如,如果您有一个名为@Foo的注释本身使用@Retention(RetentionPolicy.SOURCE)注释,那么@Foo注释(在另一个元素上)将被解析由编译器,但 not 存储在生成的.class文件中(因此,如果您询问运行时元素是否具有@Foo注释,则会得到否定的回答)。

如果您纯粹出于文档目的使用注释,或者想要使用注释处理(在编译步骤中)处理注释,这将非常有用。

答案 2 :(得分:0)

在Java编程语言中,注释可以用作源代码中特殊形式的语法元数据。 可以注释类,方法,变量,参数和包。注释可以嵌入到编译器生成的类文件中,并且可以由Java虚拟机保留,从而影响应用程序的运行时行为。

保留策略确定应丢弃注释的位置。 具有保留策略的注释RUNTIME将通过运行时提供给JVM。