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

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

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

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

您的所有 @Builder 共享同一个生成器 class,因为该生成器的名称 class 是通过连接包含 [=] 的 的名称生成的22=]"Builder",即在这种情况下总是 "UserBuilder"。因此,不同的 @Builder 都将他们的 setter 方法贡献给了那个单一的构建器 class.

你必须让不同的 @Builder 生成不同的构建器 classes:

@Builder(builderClassName = "UserBuilder1", builderMethodName = "b1")