lombok 建设者不关心 method/constructor-properties 的限制集
lombok builders does not care of restricted set of method/constructor-properties
我有 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 的设置属性?
您的所有 @Builder
共享同一个生成器 class,因为该生成器的名称 class 是通过连接包含 [=] 的 的名称生成的22=] 和 "Builder"
,即在这种情况下总是 "UserBuilder"
。因此,不同的 @Builder
都将他们的 setter 方法贡献给了那个单一的构建器 class.
你必须让不同的 @Builder
生成不同的构建器 classes:
@Builder(builderClassName = "UserBuilder1", builderMethodName = "b1")
我有 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 的设置属性?
您的所有 @Builder
共享同一个生成器 class,因为该生成器的名称 class 是通过连接包含 [=] 的 的名称生成的22=] 和 "Builder"
,即在这种情况下总是 "UserBuilder"
。因此,不同的 @Builder
都将他们的 setter 方法贡献给了那个单一的构建器 class.
你必须让不同的 @Builder
生成不同的构建器 classes:
@Builder(builderClassName = "UserBuilder1", builderMethodName = "b1")