Java - 为什么在 .class 文件中的局部变量声明中不保留注释?
Java - Why annotation is not retained on local variable declaration in .class file?
我正在阅读 Herber Schildt 的 Java 参考资料。我在其中一个注释部分发现了一条注释:
An annotation on a local variable declaration is not retained in the .class file.
为什么 .class 文件中的局部变量声明不保留注解?
要获得具体原因,您需要与设计该功能的人交谈。
然而,作为一般背景,根据 RetentionPolicy 元注释(是的,我有意选择了 1.5 JavaDoc),了解实际上可以通过三种不同的方式处理注释:
SOURCE
表示注解只存在于源码中,根本没有写入class文件中。它用于更改编译器行为的注释,但对 运行 程序来说根本不重要。
RUNTIME
表示注解以程序可见的方式通过反射写入class文件。如评论中所述,您无法反映局部变量。
CLASS
表示注解以not visible to the program的方式写入class文件。但是,它们可以被字节码分析器或 classloader 读取。
注释作为 class、方法或字段的属性出现在 class 文件中。自定义 class 文件格式以来,就一直存在附加到这些实体的 table 属性的想法,因此向它们添加注释很容易。然而,LocalVariableType 没有每个变量的属性。
因此,我 推测 JVM 的架构师认为,仅加载时局部变量注释的好处不值得更改用于管理的数据结构局部变量 table.
我正在阅读 Herber Schildt 的 Java 参考资料。我在其中一个注释部分发现了一条注释:
An annotation on a local variable declaration is not retained in the .class file.
为什么 .class 文件中的局部变量声明不保留注解?
要获得具体原因,您需要与设计该功能的人交谈。
然而,作为一般背景,根据 RetentionPolicy 元注释(是的,我有意选择了 1.5 JavaDoc),了解实际上可以通过三种不同的方式处理注释:
SOURCE
表示注解只存在于源码中,根本没有写入class文件中。它用于更改编译器行为的注释,但对 运行 程序来说根本不重要。RUNTIME
表示注解以程序可见的方式通过反射写入class文件。如评论中所述,您无法反映局部变量。CLASS
表示注解以not visible to the program的方式写入class文件。但是,它们可以被字节码分析器或 classloader 读取。
注释作为 class、方法或字段的属性出现在 class 文件中。自定义 class 文件格式以来,就一直存在附加到这些实体的 table 属性的想法,因此向它们添加注释很容易。然而,LocalVariableType 没有每个变量的属性。
因此,我 推测 JVM 的架构师认为,仅加载时局部变量注释的好处不值得更改用于管理的数据结构局部变量 table.