Project Lombok有哪些风险?

我想出了新的一年的性能目标,我认为我的目标是减少代码库的大小,特别是样板,我会觉得很有趣。我提出的解决这个问题的一个动作就是使用Project Lombok来使bean尽可能短。但我习惯于忽视新软件和方法的缺点,所以我依赖Stack Overflow社区:谁能告诉我为什么龙目岛是个坏主意?     
已邀请:
一个主要的缺点是IDE支持。由于Lombok实际上并不是一种语言更改,并且由于您的IDE只能理解java,因此您需要一个支持Lombok的IDE才能使其正常工作。截至目前,这只是包含Eclipse和IntelliJ的Eclipse。如果您使用可能没问题的eclipse,但请记住您也在为未来的开发人员做出决定。 我建议你考虑将你的一些代码转换成一种不那么礼仪的语言,比如groovy。我们已经成功地将我们的一些业务逻辑和模型转变为groovy,并且它的工作非常顺利。     
Lombok的一个限制是它与java编译器密切相关。由于注释处理器API仅允许在编译期间创建新文件(而不是现有文件的修改),因此lombok使用该API作为修改java编译器的入口点。不幸的是,编译器的这些修改会大量使用非公共API。使用lombok可能是一个好主意,但你必须意识到升级你的编译器可能会破坏你的代码。概率很低但我总是觉得使用非公共API感到不舒服。     
像Lombok这样的东西的一个潜在缺点是,由于setter / getters“缺失”,源工具可能无法“识别”产生它的“bean”特性的结果对象的各个方面,因为这些特性仅在编译的类中显示。 另一个缺点是它是工具链中的另一个“黑魔法”。幸运的是,它似乎是一个相当温和的部分(我没有使用它),它发生在编译时而不是运行时的事实实际上是一种祝福(恕我直言)。但是,如果没有项目,您将无法重用或共享代码,因为它会在您的代码库中添加工件。因此,虽然编译的类文件可能是“POJO”,但我认为您的源代码不是POJO。 这些都不是严重的缺点,而只是需要注意的方面。     
在我看来,“Java + Lombok”中的源代码不再是Java源代码。我认为这是Borland公司多年前在他们用于VCL的Borland C ++ Builder IDE中所做的类似的事情 - 他们在C ++代码中引入了“属性”,有效地引入了某种不再是C ++的新编程语言(不是C ++意义上的C ++) C ++语言标准)。使用“Java + Lombok”的源在Java语言规范方面不是有效的源。此外,我认为注释并非旨在影响语言语义。     
这是第三方图书馆,有些开发人员对此并不了解。 IDE应该支持注释处理(有IDEA和Eclipse的插件)。 如上所述,您的代码将没有getter / setter。它导致声纳/检查式违规。     
正如用户@Jcs在另一个答案中指出的那样,我想补充更多。 在我们的项目中,我们使用了用于生成映射器类的mapstruct,在编译代码之前,使用mvn generate-sources命令,这是在使用maven处理器插件的过程阶段完成的。 project lombok在编译阶段在类文件中添加getter / setter的字节码。 由于在编译之前执行了进程阶段,因此它发现类中没有可用的getter / setter。 有一些变通方法可以执行多个编译阶段。 有关更多详细信息,请参阅此git hub票证。 注意:我正在使用Spring的STS ide并且它受到lombok的支持:)     

要回复问题请先登录注册