带有注释的方法@Builder
(从现在起称为target)会导致生成以下 7 个内容:
- 名为 的内部静态类
FooBuilder
,具有与静态方法相同的类型参数(称为builder)。 - 在构建器中:目标的每个参数都有一个私有非静态非最终字段。
- 在构建器中:包私有无参数空构造函数。
- 在构建器中:目标的每个参数都有一个类似“setter”的方法:它与该参数具有相同的类型和相同的名称。它返回构建器本身,以便可以链接设置器调用,如上面的示例所示。
- 在构建器中:
build()
调用方法的方法,传入每个字段。它返回的类型与目标返回的类型相同。 - 在构建器中:一个合理的
toString()
实现。 - 在包含目标 的类中: 一个方法,用于创建构建器
builder()
的新实例。
以作用于方法体上,也可以作用于类上,作用于类上时生成一个私有构造函数,其中所有字段作为参数,方便我们快速构造对象
传统赋值方法:
Person person = new Person();
person.setName("Adam Savage");
person.setCity("San Francisco");
person.setJob("Mythbusters");
使用@Builder之后:
Person person = Person.builder()
.name("Adam Savage")
.city("San Francisco")
.job("Mythbusters")
.build();
@Builder.default
在传统对象中,我们直接对参数赋值可以初始化参数,但是使用@Builder后,初始化参数是无效的,所以需要使用@Builder.Default注明这是一个默认构造参数
@Data
@Builder
public class Person{
private String name = "aaa";
@Builder.Default
private String city = "bbb";
private String job;
}
public static void main(String[] args){
Person person = Person.builder().build();
System.out.println(person.toString());
}
结果为:
Person(name=null, city="bbb", job=null)
@Singular
@Data
@Builder
public class Person{
private String name = "aaa";
@Builder.Default
private String city = "bbb";
private String job;
@Singular
private List<String> intrests;
}
public static void main(String[] args){
Person person = Person.builder().name("aaa").intrest("1111").intrest("2222").build();
System.out.println(person.toString());
}
结果为:
Person(name="aaa", city="bbb", job=null,intrests=["1111","2222"])
@Singular可以识别简单的复数单词,对于以以“s”结尾的单词,要删除最后一个字母;对于某些以“es”结尾的单词,要删除最后两个字母,对于不能识别的会报错
@Data
@Builder
public class Person{
private String name = "aaa";
@Builder.Default
private String city = "bbb";
private String job;
@Singular
private List<String> intrests;
@Singular("tag")
private List<String> tagList;
}
public static void main(String[] args){
Person person = Person.builder().name("aaa").intrest("1111").intrest("2222").tag("tag1").tag("tag2").build();
System.out.println(person.toString());
}
结果为:
Person(name="aaa", city="bbb", job=null,intrests=["1111","2222"],tag=["tag1","tag2"])
唯有热爱方能抵御岁月漫长。