If I add @Builder to a class. The builder method is created.
Person.builder().name("john").surname("Smith").build();
I have a requirement where a particular field is required. In this case, the name field is required but the surname is not. Ideally, I would like to declare it like so.
Person.builder("john").surname("Smith").build()
I can't work out how to do this. I have tried adding the @Builder to a constructor but it didn't work.
@Builder
public Person(String name) {
this.name = name;
}
You can do it easily with Lombok annotation configuration
import lombok.Builder;
import lombok.ToString;
@Builder(builderMethodName = "hiddenBuilder")
@ToString
public class Person {
private String name;
private String surname;
public static PersonBuilder builder(String name) {
return hiddenBuilder().name(name);
}
}
And then use it like that
Person p = Person.builder("Name").surname("Surname").build();
System.out.println(p);
Of course @ToString
is optional here.