Lombok的利与弊

使用Lombok

整体定位

没有太多技术上的东西,主要就是减少代码。或者说,将以前写的常用且重复的代码用注解的形式“简写“一下。如给属性添加Setter,Getter方法,无参构造方法,全参构造方法,hashCode(),equals()方法,toString()等等。

import

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

常用注解

Lombok features
最常用的有:@Data,@Setter,@Getter,@NoArgsConstructor。
其作用不再赘述了,直接看上面官网文档就知道了。

其他好用的注解

  • @Slf4j

作用在类上,可以直接取代:

private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(XXX.class);
  • @Builder

自动生成建造者模式的方法。

缺点

这位老哥总结的很详细:作为一名资深后端开发,为什么从不推荐别人使用Lombok,谈谈我的看法…
总结一下,有以下几点:

  • 侵入性太强
    因为Lombok注解如@Getter(),IDE在代码提示阶段就会报错:stu.getName()找不到该方法,需要下载相应的插件才可以消除错误提示。
    在多人协作开发过程中,如果有一个人使用lombok开发,那么其他人必然也需要装,不然整个项目编译不能成功。
  • 代码跟踪不友好
    因为用注解的形式省去了Setter,Getter等方法,在代码跟踪时(如查看Setter的所有调用位置)就会”断链“。
  • 版本兼容问题
    私以为这个问题不是那么严重。
    1)和Java的兼容性问题由Java本身的向后兼容性保证。
    2)团队队员之间的lombok应该由父POM统一管理,而不是各个队员自己指定。)
    3)和第三方依赖中的lombok版本冲突问题,属于项目”依赖冲突“的范畴,和任何其他jar包的依赖冲突一样,应该仔细进行依赖审查,exclude掉子依赖的lombok
  • 封装性问题
    即使对于private属性,@Data or @Setter注解会生成public的Setter,其实这个问题也不算是问题,看到网上老哥已经给出解决方案
@Setter(AccessLevel.PROTECTED)

即这样生成了private级别的Setter方法,即维持了封装性。

  • 不懂误用的问题
    如,不知道@Data是以下三个注解的合成:
    在这里插入图片描述
    来源:lombok的Data注解
    PS:
    1)关于lombok关于构造器的注解,这篇写的挺好《Lombok 实战 —— @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor》)
    2)其实具体的lombok的作用,大家可以去看编译之后的.class,对比原来的.java就明白到底什么作用了
    回到”不懂误用“的问题,如果使用者不知道Data覆写了hashCode()方法,同时又使用了Set/Map等,就有可能造成严重的后果。

到底用还是不用

知道发生了什么,小而独立的业务项目使用

以上弊端分析可以看到,最大的弊端:

  • 不懂注解给类带来了哪些改变,或者说只注意到增加了Setter/Getter/Constructor
  • 侵入性太强,绑架队友
  • 代码跟踪困难

仔细分析下来,不是不可以用。最重要的一点:不要因为使用一个偷懒工具造成bug,在了解注解给代码带来了什么改变的前提下,小团队(特别个人独立开发项目)是可以用的。

大项目,基础的工具包不要用

如果是大项目,协同的人太多,不合适。
同样地,向外提供的工具包同样不要依赖lombok,虽然在之前的分析中,认为依赖冲突是客户端自己应该解决的问题,但是能不造成麻烦就不要造成,谁也不能保证他们就能正确排包。

实用性的建议

在最简单的Java Bean上使用@Data
在实际使用中,@Data应该是使用最广泛的注解,它的确也带来了很大的便利。如果非要使用的话,建议把它用在最简单的Java Bean上。
1)这个bean的private属性对封装性没有那么高要求(生成public Setter也没事)
2)这个bean对象不会作为Set,Map参数(泛型)传入(因为hashCode()已经被重写,很危险)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的信息,目前Lombok插件在IDEA 2021.2的插件中无法搜索到,并且在官方网站上也只支持到2020.2版本。这意味着Lombok插件与IDEA 2021版本不兼容。解决这个问题的方法有两种。一种是使用2020.2版本的IDEA,另一种是通过修改插件文件来适配2021版本。具体的修改方法可以参考引用\[3\]中的描述。请注意,在进行任何修改之前,请备份您的IDEA和插件文件,以防止意外情况的发生。 #### 引用[.reference_title] - *1* [lombok 不兼容idea 2021.2的解决办法](https://blog.csdn.net/qq_26632895/article/details/120628128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [解决:IDEA2021安装lombok插件不兼容问题,plugin xxxx is incompatible](https://blog.csdn.net/weixin_44917577/article/details/118937025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [lombok不适用idea2021.*版本解决办法](https://blog.csdn.net/qq_44772261/article/details/121922088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值