Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Outra resolução, está correto?

Neste caso eu inicializei o atributo data com a data atual e criei o método recebendo a data como parametro, no main, se eu nao chamo o metodo, ele traz a data atual, caso eu chame o metodo e passe uma data, ele traz a data informada, gostaria de saber se está correto desta forma tbm?

package br.com.alura.designpatterns.builder;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

public class NotaFiscalBuilder {

    private String razaoSocial;
    private String cnpj;
    private double valor;
    private double impostos;
    private List<ItemDaNota> todosItens = new ArrayList<>();
    private LocalDateTime data = LocalDateTime.now();
    private String observacoes;

    public NotaFiscalBuilder paraEmpresa(String razaoSocial) {
        this.razaoSocial = razaoSocial;
        return this;
    }

    public NotaFiscalBuilder comCnpj(String cnpj) {
        this.cnpj = cnpj;
        return this;
    }

    public NotaFiscalBuilder comItem(ItemDaNota item) {
        todosItens.add(item);
        valor += item.getValor();
        impostos += item.getValor() * 0.05;
        return this;
    }

    public NotaFiscalBuilder naData(LocalDateTime data) {
        this.data = data;
        return this;
    }

    public NotaFiscalBuilder comObservacoes(String observacoes) {
        this.observacoes = observacoes;
        return this;
    }

    public NotaFiscal build() {
        return new NotaFiscal(razaoSocial, cnpj, valor, impostos, data, observacoes, todosItens);
    }

}
1 resposta
solução!

Olá!

Como está trabalhando com data e horário, acredito que seja melhor fazer a verificação no momento de usar o método.

 public NotaFiscalBuilder naData(LocalDateTime data) {
        this.data = data != null?data:LocalDateTime.now();
        return this;
    }