Clay

用进废退 | 工字不出头

  • 主页
  • 归档
  • 随笔
  • 搜索
所有文章

Clay

用进废退 | 工字不出头

  • 主页
  • 归档
  • 随笔

Lombok 使用教程

发表于:2019-02-28
字数统计:839
阅读量统计:

项目中使用 Lombok

1) 项目添加 Lombok 的 Maven 依赖:

1
2
3
4
5
6
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>

2) IDEA 安装 Lombok 插件:

3) IDEA 启用 Annocation Processors:

4) 使用 Lombok 提供的注解:

  • @Getter
  • @Setter
  • @ToString
  • @EqualsAndHashCode
  • @NonNull
  • @NoArgsConstructor
  • @RequiredArgsConstructor
  • @AllArgsConstructor
  • @Data
  • @Builder
  • @Log
  • @Cleanup
  • @SneakyThrows

使用 Lombok 的优点

  • 减少代码维护:新增属性的时候,会减少非常多的代码维护工作
  • 减少模板代码:Lombok 对大量的模板代码进行了封装,可以减少重复代码

使用 Lombok 的缺点

1) 侵入性太强:Lombok 的使用要求开发者一定要在 IDE 中安装对应的插件,如果项目组中使用了 Lombok,那么所有开发人员都必须安装 IDE 插件,否则就没办法协同开发。

2) 降低代码可读性:在项目中使用了 Lombok,确实可以帮忙减少很多代码,但是这些代码是要在编译阶段才会生成的,所以在开发的过程中,其实很多代码其实是缺失的。大量使用 Lombok,就导致代码的可读性降低,而且也会给代码调试带来一定的问题。比如,想要知道某个类中的某个属性的 Getter 方法都被哪些类引用的话,就没那么简单了。

3) 容易踩坑:在使用 Lombok 过程中,如果对于各种注解的底层原理不理解的话,很容易产生意想不到的结果。举一个简单的例子,当使用 @Data 定义一个类的时候,会自动帮我们生成 equals() 方法,但是如果只使用了 @Data,而不使用 @EqualsAndHashCode(callSuper=true) 的话,会默认是 @EqualsAndHashCode(callSuper=false),这时候生成的 equals() 方法只会比较子类的属性,不会考虑从父类继承的属性,无论父类属性访问权限是否开放,这就可能得到意想不到的结果。

4) 影响升级:因为 Lombok 对于代码有很强的侵入性,这就可能带来一个比较大的问题,那就是会影响日后对 JDK 版本的升级。按照如今 JDK 的升级频率,每半年都会推出一个新的版本,但是 Lombok 作为一个第三方工具,并且是由开源团队维护的,那么 Lombok 的迭代速度是无法保证的。如果日后需要升级到某个新版本 JDK 的时候,若其中的特性在 Lombok 中不支持的话就会受到影响。还有一个可能带来的问题,就是 Lombok 自身的升级也会受到限制,因为一个应用可能依赖了多个 Jar 包,而每个 Jar 包可能又要依赖不同版本的 Lombok,这就导致在应用中需要做版本仲裁,而 Jar 包版本仲裁是没那么容易的,而且发生问题的概率也很高。

5) 破坏封装性:使用 Lombok 会破坏封装性,众所周知,Java 的三大特性包括封装性、继承性和多态性;如果在代码中直接使用 Lombok,那么会自动生成 Getter、Setter 等方法,这就意味着一个类中的所有参数都自动提供了设置和读取方法。

本文作者: Clay
发布时间: 2019-02-28 22:25:44
本文链接: https://www.techgrow.cn/posts/15ca8348.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
赏

谢谢你的支持

支付宝
微信
  • Java
  • hide

扫一扫,分享到微信

微信分享二维码
Hexo 优化 - 利用 Gulp 压缩代码
人工智能视频换脸初级教程
© 2021 Clay
本站总访问量  人次
载入天数...载入时分秒...
粤ICP备19024664号
  • 所有文章

显示标签:

  • AI
  • C/C++
  • CI/CD
  • CentOS
  • Centos
  • Docker
  • HarmonyOS
  • Java
  • Linux
  • Manjaro
  • Python
  • Web服务器
  • 企业面试
  • 分布式
  • 前端
  • 区块链
  • 开发工具
  • 开源
  • 微服务
  • 数据库
  • 架构
  • 树莓派
  • 爬虫
  • 版本控制
  • 知识图谱
  • 算法与数据结构
  • 缓存
  • 网络攻防
  • 随笔

    [^_^] 出错啦!请重新刷新页面!