Java|Lombok 简单方便,为什么有些公司不让用?
文章图片
文章图片
我必须承认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在一定程度上减少了样板代码的编写 , 但它也带来了一些未知的风险 。
【Java|Lombok 简单方便,为什么有些公司不让用?】如果您正在参与团队项目(或大型项目) , 请考虑随后的升级和扩展 , 是否要使用Lombok , 请与您的团队沟通并三思 。
推荐阅读
- 三国杀|三国杀:谁是技能最简单的武将,返璞归真,这就是武将基本元素!
- ag战队|关键的卡位赛,AG超玩会却上了猫神,原因很简单,但是却很心酸
- ps3|魔兽怀旧服:专业打“补丁”的装备,虽然获取简单,但能弥补短处
- 地下城堡|LOL手游上分总结,中单最简单上单没人帮,快手投大钱招新主播
- |《英雄联盟手游》当前版本最强上分英雄公布,阿克尚最强团战“利器”,上分很简单
- 黄忠|五个能秒坦克的射手,香香仅排第五,榜首瞬秒脆皮太简单
- 炸弹人|英雄联盟手游:炸弹人+石头人走下,简单又强力啊
- 貂蝉|高难度英雄等于高操作英雄?非也,有些英雄简单,但你却玩不好
- 原神|原神:新深渊出炉后,钟离最终还是倒了?削弱一个角色太简单了
- 第五人格|魔兽世界赛季服副本魔改,机制变动,喊副本简单的人快来玩