百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

我要狠狠的反驳“公司禁止使用Lombok”的观点

lipiwang 2025-06-09 23:25 6 浏览 0 评论

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

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

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肯定会支持更高的版本,那时兼容问题将不存在。



胁迫使用

当你的源代码中使用了 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的parent依赖中统一引入了。


得不偿失

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


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


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

相关推荐

ubuntu单机安装open-falcon极度详细操作

备注:以下操作均由本人实际操作并得到验证,喜欢的同学可尝试操作安装。步骤一1.1环境准备(使用系统:ubuntu18.04)1.1.1安装redisubuntu下安装(参考借鉴:https://...

Linux搭建promtail、loki、grafana轻量日志监控系统

一:简介日志监控告警系统,较为主流的是ELK(Elasticsearch、Logstash和Kibana核心套件构成),虽然优点是功能丰富,允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,...

一文搞懂,WAF阻止恶意攻击的8种方法

WAF(Web应用程序防火墙)是应用程序和互联网流量之间的第一道防线,它监视和过滤Internet流量以阻止不良流量和恶意请求,WAF是确保Web服务的可用性和完整性的重要安全解决方案。它...

14配置appvolume(ios14.6配置文件)

使用AppVolumes应用程序功能,您可以管理应用程序的整个生命周期,包括打包、更新和停用应用程序。您还可以自定义应用程序分配,以向最终用户提供应用程序的特定版本14.1安装appvolume...

目前流行的缺陷管理工具(缺陷管理方式存在的优缺点)

摘自:https://blog.csdn.net/jasonteststudy/article/details/7090127?utm_medium=distribute.pc_relevant.no...

开源数字货币交易所开发学习笔记(2)——SpringCloud

前言码云(Gitee)上开源数字货币交易所源码CoinExchange的整体架构用了SpringCloud,对于经验丰富的Java程序员来说,可能很简单,但是对于我这种入门级程序员,还是有学习的必要的...

开发JAX-RPC Web Services for WebSphere(下)

在开发JAX-RPCWebServicesforWebSphere(上)一文中,小编为大家介绍了如何创建一个Web服务项目、如何创建一个服务类和Web服务,以及部署项目等内容。接下来小编将为大...

CXF学习笔记1(cxf client)

webservice是发布服务的简单并实用的一种技术了,个人学习了CXF这个框架,也比较简单,发布了一些笔记,希望对笔友收藏并有些作用哦1.什么是webServicewebService让一个程序可...

分布式RPC最全详解(图文全面总结)

分布式通信RPC是非常重要的分布式系统组件,大厂经常考察的Dubbo等RPC框架,下面我就全面来详解分布式通信RPC@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》...

Oracle WebLogic远程命令执行0day漏洞(CVE-2019-2725补丁绕过)预警

概述近日,奇安信天眼与安服团队通过数据监控发现,野外出现OracleWebLogic远程命令执行漏洞最新利用代码,此攻击利用绕过了厂商今年4月底所发布的最新安全补丁(CVE-2019-2725)。由...

Spring IoC Container 原理解析(spring中ioc三种实现原理)

IoC、DI基础概念关于IoC和DI大家都不陌生,我们直接上martinfowler的原文,里面已经有DI的例子和spring的使用示例《InversionofControlContainer...

Arthas线上服务器问题排查(arthas部署)

1Arthas(阿尔萨斯)能为你做什么?这个类从哪个jar包加载的?为什么会报各种类相关的Exception?我改的代码为什么没有执行到?难道是我没commit?分支搞错了?遇到问题无法在...

工具篇之IDEA功能插件HTTP_CLENT(idea2021插件)

工具描述:Java开发人员通用的开发者工具IDEA集成了HTTPClient功能,之后可以无需单独安装使用PostMan用来模拟http请求。创建方式:1)简易模式Tools->HTTPCl...

RPC、Web Service等几种远程监控通信方式对比

几种远程监控通信方式的介绍一.RPCRPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.meth...

《github精选系列》——SpringBoot 全家桶

1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...

取消回复欢迎 发表评论: