当前位置: 首页 > 知识库问答 >
问题:

编译时Java代码转换

国胤
2023-03-14

我想在将源代码传递给编译器之前,在编译时转换java源代码。换句话说,我想创建一个能够转换的预处理器

"bla bla bla" 

转换为任何其他代码,如:

new MyClass("bla", 3) 
    null

我很乐意为这两种方法找到一个java代码预处理的简单示例。

有没有人认为有什么聪明的方法来进行代码转换,而不是用多个ivy模块完全改变现有的大型代码库?注释似乎是最好的方法,但我不明白该怎么做。

共有1个答案

闾丘玮
2023-03-14

我想你可以尝试在龙目岛计划中使用的同样的技术

作者在这次采访中大致解释了一下:

引擎盖下面怎么了?例如,一个注释是如何导致样板最终出现在字节码中的?

相反,Lombok将注释处理器API仅仅用作将自身注入编译过程的机制。所有注释处理器都是在编译过程的早期初始化的,当javac被初始化为注释处理器时,Lombok会修改javac。我们只改变了一件事:AST(原始源代码,解析成树形)首先被传递给Lombok,它生成需要生成的任何内容,然后javac继续。

龙目岛是如何运作的?

还可以根据您的需要扩展Project Lombok

  • 使用Project Lombok自定义AST转换
  • Project Lombok:创建自定义转换
 类似资料:
  • 我们目前在Java8中编译了代码,但我们在Java11 VM上运行它。现在我们也在尝试将代码移动到Java11编译时。想知道在Java8中编译代码与在Java11中编译代码在性能方面是否有任何好处,因为两个编译器都会生成不同的类文件(字节码)?在效率方面,一个与另一个有何不同?

  • 1.1. 代码编译 1.1.1. Openwrt编译 1.1.2. Kernel编译 1.1.3. Uboot编译 1.1.4. VSP编译 1.1. 代码编译 1.1.1. Openwrt编译 作为Kamino18 YODAOS的整体编译环境,使用openwrt可以编译出系统正常运行所需的主要image如下: 镜像名字 镜像运行位置 镜像说明 镜像生成位置 mcu.bin MCU The ima

  • 问题内容: 我一直在尝试将Notepad 设置为一个小的Java环境,主要是为了学习Java,因为我很难获得一个简单的程序来与NetBeans一起使用,不幸的是,有关设置Notepad 来调用Java代码的所有建议均不起作用。 我猜notepad ++发生了变化,或者Java开发工具包已经进行了大规模修改,因为我使用的所有示例都会导致错误,即使错误的余地很小。 首先,我找到了这个网站:http :

  • 我知道这听起来像是一个奇怪的“问题”,但请坚持住。 我有一个支持OpenGL 3.3的显卡。< br >但是,我正在编写针对OpenGL 2.0的代码,因此也是针对1.1版的代码。< br >我有以下GLSL代码:< br > 如您所见,我已将GLSL版本指定为#version 110。 您可能还注意到,我对vec4位置使用了“in”关键字 该关键字在指定的GLSL版本中不可用,但它在我的图形卡(

  • ucore 代码编译 (1) 编译过程:在解压缩后的 ucore 源码包中使用 make 命令即可。例如 lab1中: [email protected]: ~/lab1$ make 在lab1目录下的bin目录中,生成一系列的目标文件: ucore.img:被qemu访问的虚拟硬盘文件 kernel: ELF格式的toy ucore kernel执行文,被嵌入到了ucore.img中

  • * *我正在使用JSP、JavaServlet和Hibernate开发一个电子商务应用程序。执行此代码时出现以下错误。我得到了这个错误需要帮助调试它**