CTO 说禁用 Lombok,看我怼死他。。

Cassandra分布
• 阅读 1614

作者:Java 实用技术\
出处:toutiao.com/i6884399145390440964

经常在其他各个地方在说公司禁止使用 Lombok,我一直不明白为什么不让用,看到一篇文章列举了一些“缺点”,这里我只想狠狠地反驳,看到列举的理由我竟无言以对。

原文如下:下面,结合我自己使用 Lombok 之后的感受,谈谈 Lombok 带来的几大痛点。

01、JDK 版本问题

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

于是我不得不将所有的 Lombok 注解从项目源代码中清除,并使用 IDE 自带的功能生成 getter/setter,equals,hashCode,toString 以及构造器等方法,你也可以使用 Delombok 工具完成这一过程。但这终究会消耗你很多的时间。

我的反驳:

很多公司一旦确定 JDK 版本在很长的时间都不会改变(比如银行项目很多都在用 JDK1.6,你问他愿意升级到 JDK11 不?),现在都出到 14 版本了,你看有多少公司会升级!

如现在很多公司都在用 JDK1.8,任你出到 JDK14,我依然继续使用 JDK1.8,等你出到 JDK20 时我相信 Lombok 肯定会支持更高的版本,那时兼容问题将不存在。

02、胁迫使用

当你的源代码中使用了 Lombok,恰好你的代码又被其他的人所使用,那么依赖你代码的人,也必须安装 Lombok 插件 (不管他们喜不喜欢)。

同时还要花费时间去了解 Lombok 注解的使用情况,如果不那么做,代码将无法正常运行。使用过 Lombok 之后,我发现这是一种很流氓的行为。

我的反驳:

你装不装 Lombok 插件不是你喜不喜欢,不是由你个人意愿决定的,这是工作,公司要求怎么做就要怎么做,这是规定。

Lombok 是一个非常简单的知识点,十分钟就能上手使用,你却抱怨要花费时间学习,作为程序员不是无时无刻都在学习吗,你有这种抱怨只能你放弃程序员这个工作吧!

03、可读性差

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

首先,这是极其不安全的,因为类中某系属性我们是不希望被修改的。

另外,如果某个类中有几十个属性存在,就会有一个包含几十个参数的构造器被 Lombok 注入到类中,这是不理智的行为。

其次,构造器参数的顺序完全由 Lombok 所以制,我们并不能操控,只有当你需要调试时才发现有一个奇怪的 “小强” 在等着你。

最后,在运行代码之前,所有 JavaBean 中的方法你只能想象他们长什么样子,你并不能看见。

我的反驳:

不满意 @AllArgsConstructor 的做法你可以使用 @Builder 啊,这个支持你任意顺序任意数量的创建对象,你不了解 Lombok 的其他用法就说它不好。

你要看 JavaBean 中的方法?它有啥好看的,Getter 和 Setter 方法有啥好看的,你不知道 Getter 和 Setter 方法长什么样吗?实在不明白有什么好看的?

04、代码耦合度增加

当你使用 Lombok 来编写某一个模块的代码后,其余依赖此模块的其他代码都需要引入 Lombok 依赖,同时还需要在 IDE 中安装 Lombok 的插件。

虽然 Lombok 的依赖包并不大,但就因为其中一个地方使用了 Lombok,其余所有的依赖方都要强制加入 Lombok 的 Jar 包,这是一种入侵式的耦合,如果再遇上 JDK 版本问题,这将是一场灾难。

我的反驳:

我们在使用其他框架时,那框架引入了不计其数的包,现在要引入一个很小的包都在斤斤计较,Lombok 这么好用,几乎所有项目都会使用到,这还需要强制引入吗,我们自觉的都会在 maven 的 parent 依赖中统一引入了。

05、得不偿失

使用 Lombok,一时觉得很爽,但它却污染了你的代码,破坏了 Java 代码的完整性,可读性和安全性,同时还增加的团队的技术债务,这是一种弊大于利,得不偿失的操作。

如果你确实想让自己的代码更加精炼,同时又兼顾可读性和编码效率,不妨使用主流的 Scala 或 Kotlin 这一基于 JVM 的语言。

我的反驳:

破坏了完整性?加上臃肿的 Getter&Setter 你却嫌弃臃肿,不加你又说破坏代码的完整性,你想怎么做。

增加团队的技术债务?学个 Lombok 十分钟的事情,有什么好增加的。

要使用 Kotlin?一般公司都没有这么激进吧,现在 Kotlin 很多配套东西在企业中使用还不成熟吧。

近期热文推荐:

1.1,000+ 道 Java面试题及答案整理(2021最新版)

2.别在再满屏的 if/ else 了,试试策略模式,真香!!

3.卧槽!Java 中的 xx ≠ null 是什么新语法?

4.Spring Boot 2.6 正式发布,一大波新特性。。

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
java 编译时注解框架 lombok
lombokexlombokex是一款类似于lombok的编译时注解框架。编译时注,拥有运行时注解的便利性,和无任何损失的性能。主要补充一些lombok没有实现,且自己会用到的常见工具。创作目的补充lombok缺失的注解,便于日常开发使用。lombok的源码基本
Souleigh ✨ Souleigh ✨
4年前
请纠正这5个PHP编码小陋习
在做过大量的代码审查后,我经常看到一些重复的错误,以下是纠正这些错误的方法。在循环之前测试数组是否为空$items;//...if(count($items)0){foreach($itemsas$item){//processon$item...
Stella981 Stella981
3年前
SpringBoot配置lombok,与logback
目录:一什么是lombok二lombok安装三使用lombok四使用logback一什么是lombok  在写Java程序的时候经常会遇到如下情形:新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter,setter方法还有构造函数等。  lombok项目的产生就是为了省去我们手动创
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
OpenGL NDC 左手还是右手?
之前看到一篇文章说默认情况下OpenGLNDC是基于左手坐标系。我在我之前的博文(https://my.oschina.net/iirecord/blog/824029)中也提到过。之后我在想为什么OpenGLNDC是基于左手坐标系?真的是基于左手坐标系吗?所以这篇博客就是来找到答案。再谈OpenGL坐标变换(CoordinateT
Easter79 Easter79
3年前
SpringBoot配置lombok,与logback
目录:一什么是lombok二lombok安装三使用lombok四使用logback一什么是lombok  在写Java程序的时候经常会遇到如下情形:新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter,setter方法还有构造函数等。  lombok项目的产生就是为了省去我们手动创
Stella981 Stella981
3年前
Lombok使用3:其他注解
本篇文章会讲到:@NonNull、@Cleanup、@UtilityClass、@Log、@SneakyThrows、@Synchronized注解使用1、@NonNull使用@NonNull文档官方地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fproj
Java反射源码学习之旅 | 京东云技术团队
在我刚开始了解反射这个Java特性的时候,几乎看到的每一篇文章都会有“Java反射不能频繁使用”、“反射影响性能”之类的话语,当时只是当一个结论记下了这些话,却没有深究过为什么,所以正好借此机会来探究一下Java反射的代码。
sum墨 sum墨
11个月前
我有点想用JDK17了
大家好呀,我是summo,JDK版本升级的非常快,现在已经到JDK20了。JDK版本虽多,但应用最广泛的还得是JDK8,正所谓“他发任他发,我用Java8”。其实我也不太想升级JDK版本,感觉投入高,收益小,不过有一次我看到了一些使用JDK17新语法写的代