Lombok 虽好,使用时需谨慎

12 篇文章 0 订阅

Lombok

lombok 相信大家都不陌生了,一句话带过去:就是一系列注解在编译的时候给大家生产一些常用的基础代码,比如 构造方法、get/set、以及 builder 方式提供的链式编程。

今天讨论的就是使用 @Builder 时带来的意想不到的坑。

@Builder 的坑

@Builder
@Data
public class User{
    private Long id;
    private String username;
}

通过该注解,你后续可以采用链式编程,比如:

User u = User.builder().id(1l).username("Tom").build();

使用的比较爽,正常用起来没什么问题,但是一旦被 @Builder 注解的在反序列化时会报错:

找不到构造器, 反序列化首先调用无参构造器然后使用 set 方法赋值,而无参构造器是默认就有的,怎么回事呢?问题是出现在加上 @Builder 后才出现的,所以就猜测问题就是该注解带来的,看下源码:

 

问题清楚了:@Builder 会默认创建了个私有的全参构造器,默认构造器就需要手动添加了,另外加了默认构造器后,@Builder 又不会创建全参构造器了,所以默认和全参构造器都需要加上:

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User{
    private Long id;
    private String username;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【非典型Coder】

赏个鸡腿吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值