记一次lombok @Builder 踩坑

发现问题

在实际项目中遇到使用lombok @Builder发生对象属性值互相调换的情况,百思不得其解。将原代码重复的构造函数删除,问题解决。


还原现场

  1. 构建User类,使用@Builder注解,main方法使用builder构建对象,打印对象,展示属性。

记一次lombok @Builder 踩坑

  1. 增加全属性构造函数,参数列表不按照类属性声明顺序(name,age顺序调换),运行main,发现对象name和age属性互相调换。

记一次lombok @Builder 踩坑

问题分析

lombok的@Builder​原理是为类生成了一个静态内部类User.UserBuilder​,当我们为User.UserBuilder​设置属性完毕后调用build()​方法构造一个新的对象,build()调用了一个自动生成的全参构造器,构造器的参数列表的顺序是按照类属性声明的顺序来的。

记一次lombok @Builder 踩坑


在本案例中出现了一个手动增加的全参构造器,构造器参数顺序和类属性声明顺序不一致,@Builder​发现已经有了全参构造器就不会再自动生成全参构造器了,否则会编译报错。build()​最终调用手写的全参构造器,导致对象属性赋值错乱,让人觉得很奇怪。。。


这里建议在使用lombok时不要自己再写类似setter, getter, 全参构造器的代码了。


上一篇:Python零基础学习笔记(四十一)—— 面向对象编程思想


下一篇:Python零基础学习笔记(三十八)—— 递归方法、栈、队列模拟遍历目录