我有3种构建器方法:
@Builder(builderMethodName = "b1")
public static User builder1(String name, String age) {
return User.b3().name(name).age(age).build();
}
@Builder(builderMethodName = "b2")
public User(String name, String date, String type) {
super();
this.name = name;
this.date = date;
this.type = type;
}
@Builder(builderMethodName = "b3")
public User(String name, String age, String date, String type) {
super();
this.name = name;
this.age = age;
this.date = date;
this.type = type;
}
当我使用b1
-builder时,我希望此构建器只能设置name
和age
属性。但是,使用此方法也可以(但不应这样做):
User.b1().name("a").age("1").date("12").type("b").build();
b2
-builder也是如此。构建器只应提供name
,date
和type
,但是构建器b1
和b2
支持与b3
相同的属性,即使这些方法的声明限制了它。
如何限制b1
和b2
-builder的设置属性?
答案 0 :(得分:2)
您所有的@Builder
共享同一构建器类,因为该构建器类的名称是通过将包含的类的名称与"Builder"
串联而生成的,即在这种情况下,始终为"UserBuilder"
。因此,不同的@Builder
都将其setter方法贡献给单个构建器类。
您必须让不同的@Builder
生成不同的构建器类:
@Builder(builderClassName = "UserBuilder1", builderMethodName = "b1")