记一次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, 全参构造器的代码了。


相关文章
|
1月前
|
IDE Java 开发工具
Java 开发神器 Lombok:告别冗余,拥抱优雅!
Java 开发神器 Lombok:告别冗余,拥抱优雅!
31 0
|
3月前
|
IDE Java 程序员
Lombok使用方法和总结
Lombok使用方法和总结
|
3月前
|
安全 IDE Java
使用MapStruct和Lombok简化代码
使用MapStruct和Lombok简化代码
|
2月前
|
Java
@SneakyThrows 是 Lombok 库中的一个注解
`@SneakyThrows` 是 Lombok 库中的一个注解,它可以让你在方法签名中省略异常声明,而不需要显式地使用 try-catch 块来处理这些异常。当你使用 `@SneakyThrows` 注解时,Lombok 会自动生成相应的 try-catch 代码,将异常封装成运行时异常(通常是 `RuntimeException` 或其子类)。 这个注解在某些情况下可以简化代码,但请注意,它可能会隐藏潜在的问题,因为异常被转换成了运行时异常,这可能导致调用者无法正确处理这些异常。 下面是一个使用 `@SneakyThrows` 的示例: ```java import lombok.S
157 0
|
3月前
|
Java Maven Python
技术笔记:Lombok介绍、使用方法和总结
技术笔记:Lombok介绍、使用方法和总结
59 0
|
4月前
|
IDE Java 数据库连接
Lombok注解大全
这些是Lombok中的一些常见注解,它们可以显著减少Java代码中的冗余代码,提高代码的可读性和可维护性。不过,在使用Lombok之前,请确保你的开发环境已经配置好支持Lombok,通常需要安装相应的插件或进行设置以使IDE(如Eclipse、IntelliJ IDEA)能够正确解析Lombok注解。
37 4
|
4月前
|
IDE Java 数据库连接
Lombok注解大全
这些是Lombok中的一些常见注解,它们可以显著减少Java代码中的冗余代码,提高代码的可读性和可维护性。不过,在使用Lombok之前,请确保你的开发环境已经配置好支持Lombok,通常需要安装相应的插件或进行设置以使IDE(如Eclipse、IntelliJ IDEA)能够正确解析Lombok注解。
74 2
|
4月前
|
IDE Java 开发工具
Lombok 详解:简化 Java 开发的神奇工具
Lombok 是一款 Java 工具,通过注解自动处理如 getter/setter、toString、equals 和 hashCode 等常见代码,减少样板代码。安装 Lombok 需要在 IDE(如 IntelliJ IDEA)中添加插件,并在 Maven 或 Gradle 项目中配置依赖。常用注解包括 @Getter/@Setter 生成访问器,@ToString 生成对象描述,@EqualsAndHashCode 生成比较方法,@NoArgsConstructor/@AllArgsConstructor 生成构造器,@Data 综合应用这些注解。
310 9
|
4月前
|
Java Spring
Java 效率编码 必备插件 Lombok 让代码更优雅
该内容是一个关于Lombok插件的教程摘要:介绍了Lombok用于减少Java开发中的模板代码,提升效率;讲解了如何在IntelliJ IDEA中安装Lombok插件,以及在pom.xml中添加依赖;并提到了@Data注解能自动生成getter/setter、equals、hashCode和toString方法,@Slf4j注解自动处理日志,@Builder用于构建对象,以及@AllArgsConstructor和@NoArgsConstructor注解生成构造函数。还鼓励探索更多Lombok的注解用法。
27 0
|
4月前
|
IDE 安全 Java
Lombok的优缺点不建议使用
Lombok的优缺点不建议使用
120 0