当前位置:首页 > 科技  > 软件

腾讯电商二面:Lombok 是银弹?还是陷阱?

来源: 责编: 时间:2024-06-19 15:36:37 59观看
导读在 Java语言中,有大量类似于 getter、setter、toString 这样的模板代码,为了解决这个问题,一个流行的框架 Lombok诞生了。前几天看到腾讯的一道 2面题:Lombok是银弹?还是陷阱?生产环境建议使用 Lombok吗?今天我们一起来聊一

在 Java语言中,有大量类似于 getter、setter、toString 这样的模板代码,为了解决这个问题,一个流行的框架 Lombok诞生了。前几天看到腾讯的一道 2面题:Lombok是银弹?还是陷阱?生产环境建议使用 Lombok吗?今天我们一起来聊一聊。KQ828资讯网——每日最新资讯28at.com

KQ828资讯网——每日最新资讯28at.com

Lombok是什么?

Lombok是一个三方开源的 Java库,通过注解可以自动将代码插入到编辑器和构建工具中,为 Java程序员省略了很多样板代码的编写,除了生成getter、setter方法,还可以生成 equals、hashCode和各种类构造函数等。在很多 Java程序员的眼中简直就是银弹。KQ828资讯网——每日最新资讯28at.com

Lombok如何使用?

Lombok的使用很简单,主要是通过注解来精简代码,常用的注解如下:KQ828资讯网——每日最新资讯28at.com

  • @Getter:作用在类上,为实体类所有属性添加 getter方法;
  • @Setter:作用在类上,为实体类所有属性添加 setter方法;
  • @ToString:作用在类上,当调用toString()方法,可以输出实体类中所有属性的值。
  • @Data:作用在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解;
  • @AllArgsConstructor:作用在类上,为实体类生成包含所有属性参数的构造方法;
  • @NoArgsConstructor:作用在类上,为实体类生成无参构造方法;
  • @RequiredArgsConstructor:作用在类上,配合@NonNull注解使用,生成指定参数的构造方法。比如在age属性前面加@NonNull注解,则User生成需要age参数的构造方法;

下面给出了一个 Lombok @Data注解的使用示例:KQ828资讯网——每日最新资讯28at.com

import lombok.Data; @Datapublic class User {    private String id;    private String name;}

上述示例通过在类上使用 @Data注解后,我们就不需要再手动添加 getter、setter等模版代码,整个代码看起来简洁了很多。KQ828资讯网——每日最新资讯28at.com

Lombok如何工作?

从 Lombok如何使用的讲解中我们可以看到:Lombok主要是依赖注解来标识(标记)需要在该类中生成哪些代码。除此之外,还有一个重要的技术点是抽象语法树(AST)。KQ828资讯网——每日最新资讯28at.com

抽象语法树(AST,Abstract Syntax Tree)是一种用于表示程序源代码结构的树状数据结构。它抽象出代码的语法结构,忽略某些细节,以便于编译器或解释器进行分析和处理。KQ828资讯网——每日最新资讯28at.com

在 Java中,AST是一种在生成字节码之前创建的中间结构,如下图为 AST示例:KQ828资讯网——每日最新资讯28at.com

KQ828资讯网——每日最新资讯28at.com

KQ828资讯网——每日最新资讯28at.com

Lombok是注解和 AST的完美组合,Lombok通过识别注解,然后操纵 AST将不存在的样板代码插入到类中。KQ828资讯网——每日最新资讯28at.com

但是 Lombok并不是直接修改源代码文件,而是在编译过程中动态生成代码,为了实现这一点,Lombok需要拦截 Java编译器的调用,而这种拦截是通过插件来实现的,比如 IntelliJ, VSCode, Eclipse 或者在构建工具 Maven, Gradle, Make等。因此,如果选用的 IDE或依赖/构建管理器不支持 Lombok,代码将无法编译。KQ828资讯网——每日最新资讯28at.com

考虑因素

Lombok为 Java省略了很多样板代码的编写,但是,对于项目中使用 Lombok,我们还是应该多一些思考,这里主要总结为下面 4个考虑点:KQ828资讯网——每日最新资讯28at.com

1.编译时间

由于 Lombok在编译时完成样板代码的填充,因此,势必导致编译时间的增加,尤其是在大型代码库中,这种增加可能会有很大影响,尽管 Lombok随着版本的升级,性能也在提升,但使用 Lombok的时间仍然比不使用 Lombok的时间长。KQ828资讯网——每日最新资讯28at.com

2.友好性

Lombok大大减少了Java类中的样板代码,特别是在领域类(TOs、DTOs、实体)中,这些类通常有很多类级别的属性。KQ828资讯网——每日最新资讯28at.com

但是,使用 Lombok后,所有参与这个项目开发的技术人员都需要安装 Lombok插件,因此,对于不愿意使用 Lombok的开发人员来说不太友好。另外,如果团队中有刚工作的组员,如果一开始就在 Lombok这种环境下,那么对于他们的成长也是不友好的。KQ828资讯网——每日最新资讯28at.com

3.Java标准

在开发过程中,我们通常会使用 IDE或构建工具自动编译Java代码,所以 Lombok可以在这个阶段自动完成它的工作,但是,假如我们只是使用 javac来编译源代码,如果源代码中使用了 Lombok生成的get方法,这种情况下编译会出错提示get方法不存在。KQ828资讯网——每日最新资讯28at.com

4.兼容性

如果项目中涉及 JDK的版本升级,可能出现兼容性问题,因为每个版本可能会改变 AST的生成和解释方式。因此,如果使用了 Lombok,在升级 Java版本后,可能会导致项目无法编译。KQ828资讯网——每日最新资讯28at.com

尽管这个问题重新编译后可以解决,但是,如果使用了 Lombok,还是要注意上述提到的可能编译失败的问题。KQ828资讯网——每日最新资讯28at.com

5.开发和CR

Lombok 是在编译期为类生成样板代码,因此,开发人员在调试时看不到这些代码,可能会给调试带来一些困难,另外,Lombok 自动生成的代码是隐式的,可能会让代码行为不够透明,给代码审查和维护带来一些挑战。KQ828资讯网——每日最新资讯28at.com

总结

本文从面试题出发,讲解了 Lombok的工作原理以及其优点和需要考虑的因素:KQ828资讯网——每日最新资讯28at.com

1.优点

可以大大减少样板代码的手动编写KQ828资讯网——每日最新资讯28at.com

2.考虑因素

  • 编译时间
  • 友好性
  • Java标准
  • 兼容性
  • 开发和CR

3.个人建议

对于我个人而言,倾向于在项目不使用 Lombok,主要有以下 3个原因:KQ828资讯网——每日最新资讯28at.com

  • Lombok只是减少样板代码,帮助程序员偷了懒,并没有给项目带来什么实质性的收益,而且这些样板代码 IDE也可以快速生成;
  • 基于上述 5个考虑因素的任何一个,引入 Lombok都不是一个很好的决定;
  • 网上看到了 Lombok很多花哨的使用方式,这样潜在的风险更大;

最后,项目中是否使用 Lombok,取决于个人喜好以及团队和项目的选择(大厂一般都会禁用 Lombok),但是,上述的考虑因素或许可以给你的决策多一个参考。KQ828资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-94843-0.html腾讯电商二面:Lombok 是银弹?还是陷阱?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一行 Python 实现文件批量重命名的七种方法

下一篇: 从 Linux 服务器上递归下载文件夹下所有文件

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为“On
  • SpringBoot中使用Cache提升接口性能详解

    SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 每天一道面试题-CPU伪共享

    每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    重估百度丨“晚熟”的百度云,能等到春天吗?

    ©自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  •  首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top