它使用 Java6中提供的 JSR 269可插入注释处理 API

请注意,lombok.jar包含一个名为 /META-INF/services/javax.annotation.processing.Processor的文件。当 javac在编译类路径中看到这个文件时,它会运行在编译过程中定义的注释处理器。

作为 axtavt 答案的补充: 龙目岛使用的数据远远超过了 JSR 269 API 所暴露的数据。龙目岛针对 a)内部 javac apis 和 b)内部 eclipseapis 编码(在单独的处理器中)。JSR 269不允许您修改现有的源代码,但是当您将一个 Element强制转换到底层 AST 节点时,您实际上可以修改 AST (龙目岛项目就是这样做的)。

因此,龙目岛是一个巨大的黑客,只能使用 javac 或 eclipse 的编译器进行编译。这是一个伟大的软件,但它也因为是这样一个非标准的黑客而被许多人憎恨。

正如肖恩•帕特里克•弗洛伊德(seanpatrickfloyd)所言,龙目岛的确在编写针对内部 API 的代码。然而,由于 Lombok 是参与编译阶段的 仅此而已,它声称龙目岛将只能在 sun VM 上运行的说法具有误导性。它只能在 ecj 或 Sun 的 javac 上编译。然而,绝大多数的虚拟机,如果他们提供编译器的话,就是其中之一。例如,AppleVM 附带了股票 sun javac,因此 Lombok 在 Mac 上运行良好。例如,对于豆奶 VM 也是如此。

而对于 javac,我们确实必须坚持他们的更新,部分原因是由于他们的编译器现在正在进行的工作,我们已经不得不作出一个小的调整,我们的 Eclipse 支持许多版本的 eclipse。因此,当我们针对内部 API 编写代码时,它们是相对稳定的比特。

如果不使用内部 API 就可以完成 Lombok 所做的事情,那么我们可以做其他的事情,但是这是不可能的,所以我们使用内部 API。

NB: 我是 Lombok 的主要开发者之一,所以,我可能有点偏见: P