在lombok
日常使用场景中,总会碰到对象中包含集合的情况,这种情况下,我们对于对象中集合的赋值就需要像其他属性一样使用set
方法进行赋值操作:
@Data
@Builder
class Student{
private String name;
private List<String> skills;
}
builder
源码剖析:
public static class StudentBuilder {
// 省略其他部分
public Student.StudentBuilder skills(List<String> skills) {
this.skills = skills;
return this;
}
}
这种方式来初始化集合属性不能说是错的,但是用起来还是不够人性化,我们对集合进行构建时主要也是为其添加元素,因此能不能有一个专门为该集合添加元素的方法,同时将集合的实例化隐藏在代码内部的操作呢,答案是肯定的,这就是@Singular
的作用:
@Data
@Builder
class Student{
private String name;
@Singular("addSkill")
private List<String> skills;
}
源码剖析:
public static class StudentBuilder {
// 省略其他部分
public Student.StudentBuilder addSkill(String addSkill) {
if (this.skills == null) {
this.skills = new ArrayList();
}
this.skills.add(addSkill);
return this;
}
}
对比与上一份代码,加入了@Singular
注解后,lombok
为我们添加了一个为集合添加元素的方法,方法名时我们自定义的名称,当我们不指定方法名时,lombok
会根据英文自动推导出方法名,如:skills -> skill,集合名称为:skills,那么它会将复数去掉后,剩下的单词就是方法名称了。如果使用了不规范的命名则一定要指定方法名