记一次lombok @Builder 踩坑

简介: 记一次lombok @Builder 踩坑

发现问题

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


还原现场

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

image.png

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

image.png

问题分析

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

image.png


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


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


相关文章
|
2月前
|
Java
lombok的使用
本文介绍了Lombok库的基本使用方法和常用注解,通过示例代码展示了如何使用Lombok简化Java对象的创建、属性访问、日志记录等编码工作,使代码更加简洁。
lombok的使用
|
2月前
|
IDE Java 编译器
lombok编译遇到“找不到符号的问题”
【9月更文挑战第18天】当使用 Lombok 遇到 “找不到符号” 的问题时,可能是由于 Lombok 未正确安装、编译器不支持、IDE 配置不当或项目构建工具配置错误。解决方法包括确认 Lombok 安装、编译器支持,配置 IDE 和检查构建工具配置。通过这些步骤通常可解决问题,若问题仍存在,建议检查项目配置和依赖,或查看日志获取更多信息。
742 2
|
3月前
|
IDE Java 开发工具
Java 开发神器 Lombok:告别冗余,拥抱优雅!
Java 开发神器 Lombok:告别冗余,拥抱优雅!
72 0
|
5月前
|
安全 IDE Java
使用MapStruct和Lombok简化代码
使用MapStruct和Lombok简化代码
175 2
|
5月前
|
IDE Java 程序员
Lombok使用方法和总结
Lombok使用方法和总结
|
4月前
|
Java
@SneakyThrows 是 Lombok 库中的一个注解
`@SneakyThrows` 是 Lombok 库中的一个注解,它可以让你在方法签名中省略异常声明,而不需要显式地使用 try-catch 块来处理这些异常。当你使用 `@SneakyThrows` 注解时,Lombok 会自动生成相应的 try-catch 代码,将异常封装成运行时异常(通常是 `RuntimeException` 或其子类)。 这个注解在某些情况下可以简化代码,但请注意,它可能会隐藏潜在的问题,因为异常被转换成了运行时异常,这可能导致调用者无法正确处理这些异常。 下面是一个使用 `@SneakyThrows` 的示例: ```java import lombok.S
307 0
|
5月前
|
Java Maven Python
技术笔记:Lombok介绍、使用方法和总结
技术笔记:Lombok介绍、使用方法和总结
72 0
|
6月前
|
IDE Java 数据库连接
Lombok注解大全
这些是Lombok中的一些常见注解,它们可以显著减少Java代码中的冗余代码,提高代码的可读性和可维护性。不过,在使用Lombok之前,请确保你的开发环境已经配置好支持Lombok,通常需要安装相应的插件或进行设置以使IDE(如Eclipse、IntelliJ IDEA)能够正确解析Lombok注解。
53 4
|
6月前
|
IDE Java 数据库连接
Lombok注解大全
这些是Lombok中的一些常见注解,它们可以显著减少Java代码中的冗余代码,提高代码的可读性和可维护性。不过,在使用Lombok之前,请确保你的开发环境已经配置好支持Lombok,通常需要安装相应的插件或进行设置以使IDE(如Eclipse、IntelliJ IDEA)能够正确解析Lombok注解。
96 2
|
6月前
|
Java Spring
Java 效率编码 必备插件 Lombok 让代码更优雅
该内容是一个关于Lombok插件的教程摘要:介绍了Lombok用于减少Java开发中的模板代码,提升效率;讲解了如何在IntelliJ IDEA中安装Lombok插件,以及在pom.xml中添加依赖;并提到了@Data注解能自动生成getter/setter、equals、hashCode和toString方法,@Slf4j注解自动处理日志,@Builder用于构建对象,以及@AllArgsConstructor和@NoArgsConstructor注解生成构造函数。还鼓励探索更多Lombok的注解用法。
40 0
下一篇
无影云桌面