lombok builders не заботится об ограниченном наборе свойств метода / конструктора - PullRequest
1 голос
/ 17 мая 2019

У меня есть 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?

1 Ответ

2 голосов
/ 17 мая 2019

Все ваши @Builder разделяют один и тот же класс построителя, потому что имя этого класса построителя генерируется путем объединения имени содержащего класса с "Builder", то есть это всегда "UserBuilder"в этом случае.Таким образом, различные @Builder все вносят свои методы установки в этот единственный класс построителя.

Вы должны позволить различным @Builder генерировать разные классы построителей:

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