java 反射可以将方法添加到 class 文件中,而 java 源文件中没有吗?

Could java reflection add method into class file that are not in java source file?

我最近正在研究 java 的深度学习的源代码。有这样一个 class NeuralNetConfiguration ,其中有大量的字段都需要 getter 和 setter。然而,NeuralNetConfiguration.java 源代码没有提供任何内容。

当我在 IntelliJ 中打开这个项目时,按住 ctrl 单击这个 class 的用法,这些方法大多像 NeuralNetConfiguration.getNInput() 或 NeuralNetConfiguration.getKernelSize(),IDE 将我指向已编译的 class 文件,其中为 class.

中的每个字段定义了所有 getter

只是想知道这是如何完成的,因为我是 java 的新蜜蜂。我找到的关于 java reflect 的帖子表明 reflect 不能将方法添加到 class 的方法中,除非你编写了自己的 classloader。我检查了 java 项目的深度学习,但我认为他们没有这样做。

不时困扰我的是,IntelliJ 开始报告无法解析这些 getFields 方法的错误,因为它们根本不在源文件中,尤其是在我使用 IntelliJ 而不是使用 构建项目之后mvn 命令行。

奇迹发生在 class 上的 @Data 注释。此注释来自 Project Lombok。某处可能有一个注解处理器挂钩到编译过程并生成这些方法。