lambok@Builder和@Data不能共用

本文介绍了解决在使用@Builder注解时导致实体类缺失无参构造器的问题,通过简单地添加一个无参构造器即可解决由@Data引起的构造器丢失。

由于添加@Builder会将@Data让类缺失无参构造器,加上即可。

	@Tolerate
	public 实体类名(){}
### 使用 `@Data` `@Builder` 注解的方法及其区别 #### `@Data` 注解的功能 `@Data` 是 Project Lombok 提供的一个强大注解,用于简化 Java 类的编写。当在一个类上使用此注解时,Lombok 将自动为该类的所有字段生成标准的 getter 方法 setter 方法[^3]。 此外,对于布尔类型的字段还会创建 isXxx() 形式的 getter 方法;如果存在私有 final 字段,则会为其添加一个带有参数列表的构造函数以便初始化这些不可变属性;同时也会实现 equals(), hashCode(), toString() 等常用方法以方便调试比较实例之间的差异[^1]。 ```java import lombok.Data; @Data public class User { private String name; private int age; } ``` 上述代码片段展示了如何利用 `@Data` 来减少样板代码的数量。一旦应用了这个注解之后就不必再手动定义那些冗长而重复性的存取逻辑了。 #### `@Builder` 注解的作用 另一方面,`@Builder` 则是用来支持建造者模式 (Builder Pattern),它允许开发者采用更加直观的方式去构建复杂对象而不至于让构造器变得难以管理或者阅读困难。通过这种方式可以轻松地按照需求逐步设置各个成员变量并最终得到完整的实体对象实例[^2]。 下面的例子说明了怎样借助于 `@Builder` 实现更优雅的对象创建: ```java import lombok.Builder; @Builder public class CityInfo { private String cityName; private double latitude; private double longitude; } // 创建对象 CityInfo city = CityInfo.builder() .cityName("Beijing") .latitude(39.9042) .longitude(116.4074) .build(); ``` 这里可以看到,相比于传统的多参构造器调用形式而言,基于 Builder 模式的写法显然更具可读性灵活性。 #### 同时使用 `@Data` `@Builder` 的注意事项 然而,在某些情况下可能会遇到两者共同作用所带来的兼容性问题——特别是当它们都应用于同一个类的时候。由于二者都会尝试自动生成不同种类的构造器(无参/全参),这可能导致编译错误的发生。为了避免这种情况出现,建议采取如下措施之一来解决问题:引入额外的辅助注解如 `@NoArgsConstructor`, `@AllArgsConstructor` 或调整默认行为使得只有其中一个负责提供必要的构造机制[^4]。 例如可以通过显式声明带全部参数的构造方法(`@AllArgsConstructor`)从而确保与 builder 构造流程相协调工作,而不是依赖由 `@Data` 自动生成的那个仅含必需项的版本。 综上所述,虽然 `@Data` `@Builder` 都能极大程度地方便日常开发任务,但在实际项目里应当谨慎考虑其组合使用的场景以免引发不必要的麻烦。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值