我最近正在研究java深度学习的源代码。有这样一个类NeuralNetConfiguration,其中有大量的字段都需要getter和setter。但是,NeuralNetConfiguration.java源代码不提供任何选项。
当我在IntelliJ中打开这个项目时,ctrl单击该类的用法,这些方法大多像NeuralNetConfiguration.getNInput()或NeuralNetConfiguration.getKernelSize(), IDE引导我到编译的类文件中,其中所有getter都是为该类中的每个字段定义的。
只是想知道这是如何做到的,因为我是一个新的蜜蜂到java。帖子我发现关于java反射建议反射不能添加方法到一个类的方法,除非你写自己的类加载器。我检查了java项目的深度学习,我认为他们没有这样做。
让我也时不时感到困扰的是,IntelliJ开始报告那些getFields方法无法解决的错误,因为它们根本不在源文件中,特别是在我使用IntelliJ而不是使用mvn命令行构建项目之后。
神奇的事情发生在类的@Data注释上。这个注释来自Project Lombok。可能在某个地方有一个注释处理器,它钩入编译过程并生成这些方法。