Mam taki prosty przykładowy builder:
public class User {
private final String name;
private final String lastname;
private final String phone;
private User(Builder builder) {
this.name = builder.name;
this.lastname = builder.lastname;
this.phone = builder.phone;
}
public String getName() {
return name;
}
public String getLastname() {
return lastname;
}
public String getPhone() {
return phone;
}
public static class Builder {
private String name;
private String lastname;
private String phone = "";
public Builder(String name, String lastname) {
name(name);
lastname(lastname);
}
private Builder name(String name) {
this.name = Optional.ofNullable(name).orElseThrow(() -> new IllegalArgumentException("Name must not be null"));
return this;
}
private Builder lastname(String lastname) {
this.lastname = Optional.ofNullable(lastname).orElseThrow(() -> new IllegalArgumentException("Last name must not be null"));
return this;
}
public Builder phone(String phone) {
this.phone = Optional.ofNullable(phone).orElse("");
return this;
}
public User build() {
return new User(this);
}
}
}
Kod robi to co powienien ale mam pewne wątpliwości odnośnie dobrych praktyk.
Po pierwsze, czy takie prywatne metody buildera są w porządku, czy raczej przenieść to do konstruktora(this.name = name) i sprawdzanie nulli wynieść poza klasę? Po drugie, czy takie Optionale są dobrze napisane, ponieważ dopiero zaczynam z nimi przygodę i nie do końca czuję, czy dobrze do nich podchodzę :)