我正在阅读 Herber Schildt 的《Java 引用》。我在其中一个注释部分发现了一条注释,上面写着:
An annotation on a local variable declaration is not retained in the .class file.
为什么.class文件中的局部变量声明不保留注释?
最佳答案
要获得具体原因,您需要与设计该功能的人交谈。
但是,作为一般背景,请了解实际上可以按照 RetentionPolicy 处理注释的三种不同方式。元注释(是的,我故意选择了 1.5 JavaDoc):
SOURCE
表示该注解仅存在于源代码中,根本不写入类文件中。它旨在用于更改编译器行为的注释,但对于正在运行的程序来说根本不重要。RUNTIME
表示注释以程序通过反射可见的方式写入类文件中。正如评论中所述,您无法反射(reflect)局部变量。CLASS
表示注释以 not visible to the program 的方式写入类文件中。 。但是,它们可以由字节码分析器或类加载器读取。
注释作为类、方法或字段的属性出现在类文件中。自从定义类文件格式以来,附加到这些实体的属性表的想法就已经存在,因此向它们添加注释很容易。 LocalVariableType但是,没有每个变量的属性。
因此,我推测 JVM 的架构师认为仅加载时局部变量注释的好处不值得对用于管理局部变量表的数据结构进行更改。
关于Java - 为什么 .class 文件中的局部变量声明不保留注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55972677/