龙目岛建设者并不关心方法/构造函数属性的限制集

时间:2019-05-17 15:18:54

标签: builder lombok

我有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时,我希望此构建器只能设置nameage属性。但是,使用此方法也可以(但不应这样做):

User.b1().name("a").age("1").date("12").type("b").build();

b2-builder也是如此。构建器只应提供namedatetype,但是构建器b1b2支持与b3相同的属性,即使这些方法的声明限制了它。

如何限制b1b2-builder的设置属性?

1 个答案:

答案 0 :(得分:2)

您所有的@Builder共享同一构建器类,因为该构建器类的名称是通过将包含的类的名称与"Builder"串联而生成的,即在这种情况下,始终为"UserBuilder"。因此,不同的@Builder都将其setter方法贡献给单个构建器类。

您必须让不同的@Builder生成不同的构建器类:

@Builder(builderClassName = "UserBuilder1", builderMethodName = "b1")
相关问题