Java, builder z optionalami

0

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ę :)

1

Ten optional jest całkiem bez sensu. Jak już to Objects.requireNonNull.

W podanym przypadku ten cały Builder jest bez sensu. Builder ma sens jak masz jakieś domyślne argumenty, alternatywy.

Tutaj starczy konstruktor z trrzema argumentami.

Ewentualnie, w Javie Builder przydaje się żeby nie pomieszać argumentów (jak masz 3 razy String),
ale przez te prywatne metody to zupełnie nie rozumiem jak chcesz z tego skorzystać.

Co do nulla - polecam nie używać nulla i nie sprawdzać nulla.
Jak ktoś wywołuje twój kod z nullem to znaczy, że prosi o NullPointerException.
Nie zawiedź go!

0

Ok czaję. Jak zwykle przy nauce nowych rzeczy zacząłem od overengineeringu, ale coś mi tu śmierdziało, więc dobrze, że zapytałem :) Dzięki z uwagi

1 użytkowników online, w tym zalogowanych: 0, gości: 1