序言
各位好啊,我是会编程的蜗牛,作为java开发者,我们平常在开发过程中,总是希望能够尽量少敲代码。这一方面,当然是为了偷懒,另一方面,当然也是为了代码看起来更加简洁一点,不断往编程规范上靠。然后其中有一个插件或者说依赖吧,就是lombok,它的出现真可谓程序员的福音啊。只要用了这个东西,我们再也不用写那一大堆重复的但确实必须的代码了。虽然我们也可以用IDEA自动生成这些东西,但总归麻烦啊。一旦这个类的属性做了一些调整,还得重新修改对应的setter/getter方法等。
当然,今天不是来说lombok的好的,而是想和各位探索一下这个东西存在的一些坑,防止大家踩坑,这个坑就让我来踩一下吧~
问题再现
首先,我们新建一个Dog的类,里面有name和year的属性,然后加上注解@Data,然后进行编译,可以看到class文件里面自动生成了很多代码。
 
 
里面我数了一下,一共生成了6种类型的代码,有【空构造方法】、【Get/Set方法】、【equals方法】、【canEqual】、【hashCode】、【toString】方法,我们想要的和不想要的,通过给我们生成了。
 
事情到这里本来是可以结束了,但是我们的java实在太博大精深了,区区这点注解,还不能完全生成所有的代码。
平常最常用的应该就是@Data注解了,但是其实还有好多其他的注解,比如@Builder,这是一个可以生成有参构造函数的注解,刚才生成的一般也能够满足我们的需求了,但是对于需要设置有参构造函数的情况,只用@Data就不够了。
那我们看下使用@Builder,生成的代码是怎么样的。
 
 
 
可以看到,一共生成了3个大的代码,一个是有参构造函数,一个是静态方法,一个是静态类。
那么,如果我们要使项目同时生成这些代码呢?大家可能会说,把两个注解都加上呗。那么,我们来试一下。
 
 
 
可以看到,虽然生成的代码有所增加,但少了一个关键的无参构造方法,这可是一个很关键的构造方法,在好的框架里都会调用这个无参构造方法的。如果没有,肯定会报一大堆错误的。
 
那么,我们该怎么做呢?
解决方法
然少了一个空构造方法,我们手动加一个。但结果却出乎我们的意料,编译报错了。看来这种方式是不可行的。
 
 
然刚才那种方式不同,我们可以给刚才那个空构造方法,再加一个注解,这个注解是@Tolerate,有了这个注解,可以让lombok在处理的时候,直接忽略这个构造方法,我们来看下效果。可以看到生成的class文件里面,已经有空构造方法了。
 
 
么,还有其他的方式吗?答案是肯定。我们可以使用@RequiredArgsConstructor 来构建含有参数的,用@NoArgsConstructor来构建没有参数的,而舍弃@Builder。如图,也同时生成了有参和无参的构造方法。
 
 
总结lombok虽然大大简化了我们的开发,但还是得注意其中那些注解的问题,不然一不小心就容易掉进这种坑里。可以多看看编译出来的class文件,这样能更好的理解这个框架。
 
推荐阅读 点击标题可跳转
 
 
 
 

Lombok好用是好用,就是容易踩坑,这份避坑指南请查收的更多相关文章

  1. 今天 1024,为了不 996,Lombok 用起来以及避坑指南

    Lombok简介.使用.工作原理.优缺点 Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注解,用来消除 Java 类中的大量样板代码. 目录 L ...

  2. JetBrains Fleet初体验,如何运行一个java项目

    序言 各位好啊,我是会编程的蜗牛,JetBrains 日前宣布其打造的下一代 IDE Fleet 正式推出公共预览版,现已开放下载.作为java开发者,对于JetBrains开发的全家桶可以说是印象深 ...

  3. 如何用Virtualbox搭建一个虚拟机

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,我们肯定会接触Linux服务器,除了使用云服务搭建Linux服务器外,我们一般也可以在自己的电脑上安装虚拟机来搭建Linux服务器用于各种功能的验 ...

  4. postman一些你不常用的实用技巧,竟然还能这么玩

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,平时调试接口的时候,肯定需要用到接口调试工具,或者Swagger之类的.Swagger的优势在于它可以将后台加的一些接口注释信息直接展示出来,但是 ...

  5. 国内最全的Spring Boot系列之二

    历史文章 <国内最全的Spring Boot系列之一> 视频&交流平台 SpringBoot视频:http://t.cn/R3QepWG Spring Cloud视频:http:/ ...

  6. 当Jaxb遇到泛型

    前言: 最近的工作内容跟银行有些交互, 对方提供的数据格式采用xml(不是预期的json/protobuf). 为了开发方便, 需要借助jaxb来实现xml和java对象之间的映射. 它还是有点像ja ...

  7. Decoration1:Spring-boot基础实现

    前段时间发布的Traveller项目,花费了不少精力,但是效果并不如意,根源在于瀑布式的开发思想不适合这种独立的学习项目.在项目初始就规划一个全面的web系统,,因为预设了一个前景,在心理上会想尽快看 ...

  8. 甲小蛙战记:PHP2Java 排雷指南

    (马蜂窝技术原创内容,申请转载请在公众后后台留言,ID:mfwtech ) 大家好,我是来自马蜂窝电商旅游平台的甲小蛙,从前是一名 PHP 工程师,现在可能是一名 PHJ 工程师,以后...... 前 ...

  9. SpringBoot整合log4j2进行日志配置及防坑指南

    写在前面 最近项目经理要求将原先项目中的日志配置logBack,修改为log4j2,据说是log4j2性能更优于logback,具体快多少,网上有说快10多倍,看来还是很快的,于是新的一波挑战又开始了 ...

随机推荐

  1. iNeuOS工业互联网操作系统,设备运维业务和“低代码”表单开发工具

    目       录 1.      概述... 2 2.      设备运维业务... 3 3.      "低代码"表单开发工具... 6 1.   概述 iNeuOS工业互联网 ...

  2. devops-2:Jenkins的使用及Pipeline语法讲解

    DevOps-Jenkins Jenkins简介 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续 ...

  3. element获取用户选中的table (两步即可)

    第一步 给 table 设置一个 ref 属性 1 <el-table 2 :data="DepData" 3 stripe 4 ref="depTable&quo ...

  4. LabView、CVI、MeasurementStudio三者之间的区别

    LabView是NI公司傻瓜化的图形操作测试开发工具: CVI是NI公司C语言风格的测试开发语言,当然也是工具: Measurement Studio是面向一直使用微软开发工具如VC.C#的那些开发人 ...

  5. 任意N阶幻方算法实现

    算法原理请参考:https://www.zhihu.com/question/23531676 先定义一些通用的函数,比如创建空幻方,删除幻方,打印幻方. 创建幻方 int **NewMagicS(i ...

  6. How to code like a pro in 2022 and avoid If-Else

    在浏览文章的时候发现了一篇叙述有关if-else语句的文章,这篇文章作者是Thai Tran,他原文是用英语写的,然后看着文章浅显易懂,便尝试翻译成汉语.如有不妥还望指出. 原文链接:https:// ...

  7. PHP实现服务器文件预览

    PHP实现服务器里面的所有文件进行预览跟手机文件夹一样 服务器创建一个index.php文件 点我查看 <?php // errors ini_set('display_errors', 1); ...

  8. 【JDBC】学习路径9-dbcp数据源的使用

    第一章:下载 要下载三个东西:commons pool.commons log.dbcp dbcp中有些东西是依赖于commons pool 和 commons log 的. 缺一不可,否则无法正确运 ...

  9. Linux虚拟机快捷键大全

    转发请注明原作者! 图形化命令框快捷键 Ctrl-Shift-t 创建标签页 Ctrl-Shift-w 关闭标签页 Ctrl-Shift-n 创建新窗口 Ctrl-Shift-q 关闭新窗口 Ctrl ...

  10. Android同屏、摄像头RTMP推送常用的数据接口设计探讨

    前言 好多开发者在调用Android平台RTMP推送或轻量级RTSP服务接口时,采集到的video数据类型多样化,如420sp.I420.yv12.nv21.rgb的,还有的拿到的图像是倒置的,如果开 ...