Java - 为什么 .class 文件中的局部变量声明不保留注释?

标签 java java-annotations

我正在阅读 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/

相关文章:

java - 根据 Java 环境变量中的值创建使用 @JsonIgnore 的自定义注解

java - Java 中的字符串池的行为是否类似于 LRU 缓存?

java - 初学者的问题: copying certain elements of an array

java - 使用 Java 从 ASHX URL 检索图像(在 PeopleSoft PeopleCode 中)

java - AbstractProcessor,如何声明哪个目标是另一个注释的注释?

java - 关于Processor接口(interface)的process(...)方法中定义的参数

java - 如何声明扩展注释的通用类

android - jsonschema2pojo 生成的 POJO 具有 Android Studio 无法理解的注释

java - 非法监控状态异常

java - DeepLearning4j - 神经网络配置