新来的老大说,“公司以后禁止使用Lombok”,我表示反对~

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 8:55 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:toutiao.com/i6884399145390440964

  • JDK版本问题

  • 维持使用

  • 杰出性差

  • 代码编码度增加

  • 得不偿失失


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

JDK版本问题

当我想要将现有项目的JDK从Java 8升级到Java 11时,我发现Lombok不能正常工作了。于是我不得不将所有的Lombok注解从项目源代码中清除,并使用IDE自带的功能生成getter / setter,等于,hashCode,toString以及构造器等方法,你也可以使用Delombok工具完成这一过程。那样终究会消耗你很多的时间。

我的反驳:很多公司一旦确定JDK版本在很长的时间都不会改变(某些银行项目很多都在用jdk1.6,你问他愿意升级到jdk11不?),现在都出到14版本了,你看有多少公司会升级!如现在很多公司都在用JDK1.8,任你出到JDK14,我依然继续使用JDK1.8,等你出到JDK20时我相信Lombok当然会支持更高的版本,那时兼容问题将不存在。

维持使用

当你的源代码中使用了Lombok,恰好你的代码又被其他人所使用,那么依赖你代码的人,也必须安装Lombok插件(不管他们喜不喜欢),同时还要花费时间去了解Lombok注解的使用情况,如果不那么做,代码将无法正常运行。使用过Lombok之后,我发现这是一种很流氓的行为。

我的反驳:你装不装Lombok插件不是你喜不喜欢,不是由你个人意图决定的,这是工作,公司要求怎么做就要怎么做,这是规定。Lombok是一个非常简单的知识点,十分钟就能上手使用,你却不得不花费时间学习,作为程序员不是无时无刻都在学习吗,你有这种拒绝只能你放弃程序员这个工作吧!

杰出性差

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

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

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

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

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

我的反驳:不满意@AllArgsConstructor的做法你可以使用@Builder啊,这个支持你任意顺序任意定量的创建对象,你不了解Lombok的其他用法就说它不好。你要看JavaBean中的方法?它有啥好看的,Getter和Setter方法有啥好看的,你不知道Getter和Setter方法长什么样吗?实在不明白有什么好看的??

代码编码度增加

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

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

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

得不偿失失

使用Lombok,一时觉得很爽,但它却污染了你的代码,破坏了Java代码的替代,导致性和安全性,同时又增加了团队的技术债务,这是一种弊病大于利,得不偿失失的操作。如果您确实想让自己的代码更精炼,同时又兼顾顾性性和编码效率,不妨使用主流的Scala或Kotlin这样基于JVM的语言。

我的反驳:破坏了最终?加上臃肿的Getter&Setter你却嫌弃臃肿,不加你又说破坏代码的事实,你想怎么做。增加团队的技术债务?学个Lombok十分钟的事情,有什么好增加的。要使用Kotlin?一般公司都没有这么激进吧,现在Kotlin很多配套东西在企业中使用还不成熟吧。

大家还有什么不同观点可以互相讨论。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

兄弟,一口,点个!????

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值