lombok注解:@Builder
带有注释的方法@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"])
唯有热爱方能抵御岁月漫长。