Lombok确实使用了内部API,就像Sean Patrick Floyd所说的那样。但是,由于lombok仅涉及编译阶段,因此声称Lombok仅能在sun VM上运行是误导性的。它只能在ecj或sun的javac上进行编译。但是,大多数VM中都包含编译器,如果存在编译器,则为这两个之一。例如,Apple VM使用标准sun javac,因此lombok在Mac上可以正常工作。例如,Soylatte VM也是如此。
对于javac,我们确实必须坚持使用它们的更新,部分原因是因为他们正在进行大量的编译器工作,而我们在许多版本的eclipse中只需要进行1次微小的调整。因此,虽然我们确实使用了内部API,但它们是相对稳定的部分。
如果不使用内部API也能完成Lombok的功能,我们会选择其他方案,但是现实情况是我们必须使用内部API。
注:我是lombok的首席开发人员之一,因此可能会有一些偏见: P
它使用Java 6中可用的JSR 269可插拔注解处理API。
请注意,lombok.jar
包含一个名为/META-INF/services/javax.annotation.processing.Processor
的文件。当javac
在编译类路径中看到此文件时,它会在编译期间运行定义在其中的注解处理器。
Element
强制转换为底层AST节点时,您实际上可以修改AST(这就是Lombok项目所做的)。
因此,Lombok是一个巨大的黑科技,只能使用javac或eclipse编译器进行编译。它是一款很棒的软件,但由于其非标准的黑科技而遭到许多人的厌恶。