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?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software