1
resposta

Como restringir para que um atributo seja preenchido apenas uma vez no Builder?

Aproveitei esse tópico da aula pra criar um Builder e gostaria de saber como posso restringir para que um dos atributos possam ser usados apenas uma única vez na construção. Abaixo o código

package br.com.alura;

public class EstudanteBuilder {

    private Estudante estudante;

    public EstudanteBuilder() {
        this.estudante = new Estudante();
    }

    public static EstudanteBuilder builder() {
        return new EstudanteBuilder();
    }

    public EstudanteBuilder comNome(String nome) {
        this.estudante.setNome(nome);
        return this;
    }

    public EstudanteBuilder comCPF(String numeroCPF) {
        this.estudante.setCpf(new CPF(numeroCPF));
        return this;
    }

    public EstudanteBuilder comEmail(String email) {
        this.estudante.setEmail(new Email(email));
        return this;
    }

    public EstudanteBuilder comTelefone(String ddd, String numero) {
        this.estudante.adicionarTelefone(ddd, numero);
        return this;
    }

    public Estudante build() {
        return this.estudante;
    }

    public static void main(String[] args) {

        var estudante = EstudanteBuilder.builder()
                .comNome("Andreia") // exemplo
                .comNome("Andreia") // exemplo
                .comCPF("888.888.888-38")
                .comEmail("email@email.com")
                .comTelefone("22", "000000000")
                .build();

        System.out.println(estudante);
    }
}
1 resposta

Oi Antonia,

Bom, você já está restringindo com o builder, pois cada vez que você chama o build(), uma nova instancia é criada, logo é um outro objeto, O problema seria se você tivesse disponibilizado set para seus atributos que daí sim poderia ser alterado.

Agora, não sei se foi claro ou se sua dúvida era mesmo essa?