使用Lombok @Builder注解导致默认值无效
Posted 凉茶方便面
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Lombok @Builder注解导致默认值无效相关的知识,希望对你有一定的参考价值。
@Builder注解导致默认值无效
使用Lombok注解可以极高的简化代码量,比较好用的注解除了@Data之外,还有@Builder这个注解,它可以让你很方便的使用builder模式构建对象,但是今天发现@Builder注解会把对象的默认值清掉。
像下面这段代码,会导致对象的name属性变为null:
public class BuilderTest
@lombok.Builder
@lombok.Data
private static class Builder
private String name = "1232";
@Test
public void test()
Builder builder = Builder.builder().build();
System.out.println(builder.getName());
---打印结果---
null
那么不想让这个默认值被清除,就只能用另外一个注解来对属性进行设置:@lombok.Builder.Default
示例代码如下:
public class BuilderTest
@lombok.Builder
@lombok.Data
private static class Builder
@lombok.Builder.Default
private String name = "1232";
@Test
public void test()
Builder builder = Builder.builder().build();
System.out.println(builder.getName());
---打印结果---
1232
- 需要注意的是@lombok.Builder.Default这个注解是后来才有的,目前已知的是1.2.X没有,1.6.X中有这个注解。
原因分析
使用@Builder注解的代码如下:
@lombok.Builder
class Example
private String name = "123";
Lombok会生成如下代码:
class Example
private String name;
private Example(String name)
this.name = name;
public static ExampleBuilder builder()
return new ExampleBuilder();
public static class ExampleBuilder
private String name;
private ExampleBuilder()
public ExampleBuilder name(String name)
this.name = name;
return this;
@java.lang.Override public String toString()
return "Example(name = " + name + ")";
public Example build()
return new Example(name);
很显然,ExampleBuilder的name没有默认值,导致build之后的Example的name是Null值。
以上是关于使用Lombok @Builder注解导致默认值无效的主要内容,如果未能解决你的问题,请参考以下文章