Если я добавлю @Builder в класс. Метод построителя создан.
Person.builder().name("john").surname("Smith").build();
У меня есть требование, согласно которому определенное поле является обязательным. В этом случае поле имени является обязательным. В идеале хотелось бы заявить об этом так.
Person.builder("john").surname("Smith").build();
При поиске в Google я нашел множество альтернатив, например, переопределение реализации компоновщика, как показано ниже:
@Builder
public class Person {
private String name;
private String surname;
public static PersonBuilder builder(String name) {
return new PersonBuilder().name(name);
}
}
А затем используйте его, как показано ниже:
Person p = Person.builder("Name").surname("Surname").build();
Проблема описанного выше подхода заключается в том, что он по-прежнему предоставляет методы name() и PersonBuilder(), как показано ниже, что мне не нужно:
Person p = Person.builder("Name").surname("Surname").name("").build();
Person p = new Person.PersonBuilder().build;
Другой подход — добавить проверку @lombok.nonnull для имени, которая заставит указывать значение имени при создании объекта. но это проверка во время выполнения. это не заставит меня указывать значение имени при создании объекта.
Есть ли какой-либо дополнительный метод, который Lombok предоставляет для достижения ниже:
Person p = Person.builder("Name").surname("Surname").build();
Примечание: методы builder() и name() не должны быть открыты. Единственный способ создать объект Person должен быть либо выше, либо ниже:
Person p = Person.builder("Name").build();
Подробнее здесь: https://stackoverflow.com/questions/631 ... parameters