java 1.5中@Retention背后发生了什么
我试图理解Java1.5中的保留策略。但是没有得到一个清晰的画面 作为java 1.5中@Retention背后发生了什么,java,annotations,Java,Annotations,我试图理解Java1.5中的保留策略。但是没有得到一个清晰的画面 作为 CLASS-注释将由 编译器,但不需要在运行时由VM保留 运行时-注释将由 编译器,并在运行时由VM保留,因此可以读取它们 深思熟虑地 SOURCE-编译器将丢弃注释 “丢弃”是什么意思 类文件是否通过使用源代码标记而不包含特定的注释元素 SOURCE注释仅存在于源文件中 当编译器“丢弃”注释时,实际上忽略了注释的存在。源注释的作用基本上与注释代码相同。注释的元素不受影响 @Retention就是您所说的元注释:它只适用
-注释将由 编译器,但不需要在运行时由VM保留CLASS
-注释将由 编译器,并在运行时由VM保留,因此可以读取它们 深思熟虑地运行时
-编译器将丢弃注释SOURCE
SOURCE
注释仅存在于源文件中
当编译器“丢弃”注释时,实际上忽略了注释的存在。源注释的作用基本上与注释代码相同。注释的元素不受影响
@Retention
就是您所说的元注释:它只适用于其他注释接口。因此,它也仅影响应用它的注释
例如,如果有一个名为@Foo
的注释,它本身用@Retention(RetentionPolicy.SOURCE)
注释,那么@Foo
注释(在另一个元素上)将由编译器解析,但不会存储在生成的.class
文件中(因此,如果您询问运行时元素是否有@Foo
注释,您会得到否定的答案)
如果您纯粹出于文档目的使用注释,或者希望通过注释处理(在编译步骤中)来处理注释,这将非常有用。在Java编程语言中,注释可以用作源代码中语法元数据的特殊形式。 可以对类、方法、变量、参数和包进行注释。注释可以嵌入到编译器生成的类文件中,并且可以由Java虚拟机保留,从而影响应用程序的运行时行为 保留策略确定应在哪一点放弃批注。
JVM将通过运行时使用带有保留策略运行时的批注。“抛出”。“未包含在中”。设想一些文档处理工具只查看源文件。或者某个特定的编译器可能会将它们用于编译时提示。。感谢您的回答。。就像上面的示例一样,我的@Foo注释接口及其方法声明将不会出现在编译的类文件中。因为,我创建了一个这样的注释接口,并将其标记为源。当我反编译该接口的.class文件时,我仍然会找到该接口及其方法..???。此外,当我同时使用其他两个常量时,我无法区分类文件中的任何内容…运行时和类。。