本文主要是介绍Lombok 虽好,使用时需谨慎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
这篇关于Lombok 虽好,使用时需谨慎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!