序言
各位好啊,我是会编程的蜗牛,作为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文件,这样能更好的理解这个框架。
 
推荐阅读 点击标题可跳转
 
 
 
 

最新文章

  1. 如何让nodejs同步操作
  2. 数据泵如何生成导出文件的DDL脚本
  3. Testing - Selenium
  4. IE自动化 二(判断IP所在地)
  5. java基础(七)面向对象(二)
  6. Android-应用的本地化及知识拓展之配置修饰符
  7. KeyTweak(笔记本键盘设置工具) V2.20 中文版
  8. Java客户端调用.NET的WebService
  9. nodejs简单数据迁移demo
  10. NodeJS基础(二)
  11. 在anguler项目中引用fullCalendar
  12. Python程序员常用的IDE和其它开发工具
  13. Min_25筛 学习笔记
  14. luogu P4781 【模板】拉格朗日插值
  15. SharePoint REST API - 列表和列表项
  16. Python爬虫防封杀方法集合
  17. Celery -- 分布式任务队列 及实例
  18. ubuntu系统中添加DNS服务器地址后诡异消失的解决办法
  19. 大数据入门第十六天——流式计算之storm详解(一)入门与集群安装
  20. WinPE启动U盘的制作方法与软件下载(通用PE工具箱/老毛桃/大白菜WinPE)

热门文章

  1. 流量如何才能变现?实际测试谷歌广告联盟(Google Adsense)的广告效果以及如何优化相关代码
  2. JDBC与ODBC的区别
  3. Apache DolphinScheduler 1.2.0 使用文档(1/8):架构及名词解释
  4. ahooks 中那些控制“时机”的hook都是怎么实现的?
  5. Excelize 2.3.1 发布,Go 语言 Excel 文档基础库,支持加密表格文档
  6. JavaScript基础回顾知识点记录3
  7. Vue 3-150行代码实现新国标红绿灯效果案例
  8. [开源内卷] .NET 定时任务 -- FreeScheduler 支持 cron、持久化、可变定时设置
  9. [HNOI2011]卡农 (数论计数,DP)
  10. 给ShardingSphere提了个PR,不知道是不是嫌弃我