我必须承认Lombok是一个非常好的Java库,它使您可以在编写更少代码的同时保持冷静。一些简单的注释可以杀死大量的模板代码。但是,大多数源代码用于阅读,执行时间却很少(您可以仔细阅读此语句)。

接下来,我将使用一些熟悉的场景来重复我们如何陷入龙目岛的把戏陷阱。

爱的开始,恨的起源

面对Lombok提供的许多“上帝职位”,您不必介意将插件添加到IDE中。对于IntelliJ IDEA播放器,只需搜索“ Lombok插件”以找到此工件并安装。通过安装Lombok插件开始爱上Lombok,从那以后,仇恨开始发芽。

在使用Lombok之前,我们的源代码如下所示:

每个JavaBean都将填充诸如上面的getter,setter,equals,hashCode和toString之类的模板代码,它们看起来像个胖子(必须承认Java是一种有缺陷的编程语言)。

安装Lombok插件后,IDE可以识别其出色的注释。使用Lombok的@Getter和@Setter批注后,代码将看起来像下面这样苗条:

代码现在看起来更酷吗?但这不是最佳时间。

由于其他方法已被替换,因此我们还要删除toString方法。如您所愿,您可以使用@ToString注释删除相应的方法:

在龙目岛的把戏之后,与最初的代码相比,它看起来很酷,苗条和性感吗?您认为这是结局吗?

不仅如此。您会发现类名称上的大注释看起来很尴尬。 Lombok提供了一个组合的@Data注释,它可以替换类名开头的类似于项的东西:

现在,龙目岛是否使您的物体在您的脑海中完美呈现?魔鬼的“身体”酷而精致。 Lombok还具有其他一些注释,例如@ Slf4j,@ NoArgsConstructor,@ AllArgsConstructor等。Lombok用法的介绍不是本文的重点。

上面代码行数的变化可能是无数程序员爱上Lombok的主要原因。就像肥胖的人逐渐成为苗条的人一样。

还让您看到一种现象:您认为程序员是懒惰的吗?有时它们比您想象的要懒惰。虽然很酷,但它也植入了代码的祸根。

美学扭曲,爱情隐患

扭曲的美学结果导致被检查对象处于亚健康状态。使用Lombok插件后,我们的代码也处于“亚健康”状态。回到开头的句子:大部分时间里所有的源代码都用于阅读,而执行只花很少的时间。

从本质上讲,我们都希望减少程序中的样板代码,以使代码更加简洁,从而提高代码的可读性和可维护性。

但是龙目岛没有实现我们追求的目标。它只是利用了Java语言的编译时间上的空白,并采用了一种巧妙的方式将我们需要的方法注入(编写)到当前类中。在这种情况下,这种过程很像破解我们的代码,只是一个很酷的技巧。

这种技巧既不明智也不安全,但是会破坏Java代码的现有功能以及代码的可读性。接下来,结合我使用龙目岛后的感受,谈谈龙目岛造成的主要痛点。

1. JDK版本问题

当我想将现有项目的JDK从Java 8升级到Java 11时,我发现Lombok无法正常工作。

因此,我不得不从项目源代码中删除所有Lombok批注,并使用IDE的内置函数来生成getter / setter,equals,hashCode,toString和构造函数方法。您也可以使用Delombok工具完成此过程。但这最终会消耗您大量的时间。

2.强制使用

当您在源代码中使用Lombok时,碰巧您的代码被其他人使用,那么依赖您代码的人还必须安装Lombok插件(无论他们是否喜欢),并花一些时间来了解Lombok使用注释,如果不这样做,则代码将无法正常运行。使用Lombok之后,我发现这是非常无赖的行为。

3.可读性差

Lombok隐藏了JavaBean封装的细节。如果使用@AllArgsConstructor批注,它将提供一个巨大的构造函数,该外部构造函数使外界有机会在初始化对象时修改类中的所有属性。

首先,这是非常不安全的,因为我们不想修改类中的某个属性。另外,如果某个类中有许多属性,则将有一个包含许多参数的构造函数。龙目岛被注入阶级,这是不合理的;

其次,构造函数参数的顺序完全由Lombok控制,而我们无法控制它。只有在需要调试时,您才会发现一个奇怪的“小强”在等着您。

最后,在运行代码之前,您只能想象它们在所有JavaBean方法中的样子,看不到它们。

4.增加代码耦合

当您使用Lombok编写某个模块的代码时,依赖于此模块的其他代码需要引入Lombok依赖性,同时,您需要在IDE中安装Lombok插件。

尽管Lombok的依赖包并不大,只是因为Lombok在一个地方使用,所以必须迫使所有其他依赖方加入Lombok的Jar包。这是一个侵入式耦合。如果再次遇到JDK版本问题,这将是一场灾难。

5.收益不值得损失

使用Lombok感觉很不错,但会污染您的代码,破坏Java代码的完整性,可读性和安全性,并增加团队的技术负担。这种伤害大于收益,而收益大于损失。操作。如果您确实想在考虑可读性和编码效率的同时使代码更精致,那么不妨使用主流的Scala或基于JVM的语言Kotlin。

总结一下

龙目岛本身就是一个出色的Java代码库。它使用巧妙的语法糖来简化Java的编码,并提供一种简化Java代码的方法。但是,使用此代码库时,您需要了解Lombok不是A标准Java库。

使用Lombok将增加团队的技术负担,降低代码的可读性,并增加代码的耦合和调试难度。

尽管Lombok在一定程度上减少了样板代码的编写,但它也带来了一些未知的风险。

如果您正在参与团队项目(或大型项目),请考虑随后的升级和扩展,是否要使用Lombok,请与您的团队沟通并三思。