我正在制定新年度的绩效目标,想把减少代码库大小,特别是样板代码作为一个目标。我想采取的一种方法是使用Project Lombok来使JavaBean变得更短小精悍。但是我有忽视新软件和方法缺点的习惯,所以我依赖于Stack Overflow社区:有人能告诉我为什么Lombok不是个好主意吗?
我正在制定新年度的绩效目标,想把减少代码库大小,特别是样板代码作为一个目标。我想采取的一种方法是使用Project Lombok来使JavaBean变得更短小精悍。但是我有忽视新软件和方法缺点的习惯,所以我依赖于Stack Overflow社区:有人能告诉我为什么Lombok不是个好主意吗?
Lombok的一个限制是它与Java编译器紧密耦合。由于注解处理器API只允许在编译期间创建新文件(而不是修改现有文件),因此Lombok使用该API作为修改Java编译器的入口点。不幸的是,这些对编译器的修改大量使用了非公共API。使用Lombok可能是个好主意,但您必须意识到升级编译器可能会破坏您的代码。这种情况发生的概率很低,但我总是感到使用非公共API让人感到不舒服。
在我看来,“Java + Lombok”中的源代码不再是Java源代码了。我认为这与Borland公司多年前在其Borland C++ Builder IDE for VCL中引入“属性”类似,实际上引入了一种新的编程语言,它不再是C++(不再符合C++语言标准)。使用“Java + Lombok”的源代码不符合Java语言规范的要求。此外,我认为注释并不是用来影响语言语义的。
一个主要的缺点是IDE支持。由于Lombok实际上并不是一种语言更改,且你的IDE仅能理解Java,因此你需要一个支持Lombok的IDE才能使事情正常运行。截至目前,只有Eclipse包括Eclipse和IntelliJ支持。如果你使用Eclipse也许还可以,但请记住,你也在为未来的开发人员做出决策。
我建议你考虑将部分代码移入到一种较少仪式化的语言,例如Groovy中。我们已经成功地将一些业务逻辑和模型移入Groovy中,并且它工作得非常顺畅。
在我看来,使用 Project Lombok 最明显的风险是,当你决定使用 lombok 时,你也决定了其他所有处理你的代码的人也要使用 lombok。这对所有库都是适用的真实情况,但 Lombok 是特殊的,因为它是一个构建时依赖项,你的 IDE 需要插件才能弄清楚发生了什么。这意味着任何有理由接触你的代码的人,例如试图调试奇怪行为等人,都需要知道如何设置并了解它的工作原理。这可能会有点令人沮丧。
这是一个第三方库,有些开发人员并不熟悉它。
IDE应该支持注解处理(在IDEA和Eclipse中有插件可用)。
如上所述,您的代码将没有getter/setter。 这会导致sonar/checkstyle违规。
补充其他回答的内容。
不使用它的主要原因是Java 14中添加了一个名为record
的实验性功能。Java 16将records
从预览版中释放出来,这将使大多数情况下项目Lombok变得过时。
自Java 14以来,人们可以编写:
record Book(String title, String author, String isbn);
这将自动提供构造函数、getter/setter、hashCode、equals和toString方法,无需任何注释。
record
并不是lombok的完全替代品,除非可能是特定于@lombok.Value
。即便如此,它们之间仍然存在一些差异。 - undefined