我必须承认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,请与您的团队沟通并三思。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.