·

  • 原创 | Java 2020 超神之路,很肝~

  • 中文详细注释的开源项目

  • RPC 框架 Dubbo 源码解析

  • 网络应用框架 Netty 源码解析

  • 消息中间件 RocketMQ 源码解析

  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析

  • 作业调度中间件 Elastic-Job 源码解析

  • 分布式事务中间件 TCC-Transaction 源码解析

  • Eureka 和 Hystrix 源码解析

  • Java 并发源码·

  • JDK版本问题
  • 维持使用
  • 杰出性差
  • 代码编码度增加
  • 得不偿失失

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

 

新来的老大说,“公司以后禁止使用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”,我表示反对~_其他_02杰出性差

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

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

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

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

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

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

代码编码度增加

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

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

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

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

得不偿失失

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

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

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

 



·