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

Erro no GeraPedidoHandler após alteração na classe Orcamento

Aviso: antes de tudo, essa classe foi mexida numa aula posterior 04-02 O processo de geração de um pedido, mas como o professor não explicou, deixarei a solução desse problema abaixo

Bom dia a todos

após a adição da classe ItemOrcamento para demonstrar a pattern Composite na aula 03-03 Aplicando o pattern Composite, o método execute() da classe GeraPedidoHandler parou de compilar, devido a uma alteração na classe Orcamento, que deixou de receber Valor e quantidade de itens no construtor. Código que deu erro abaixo:

    public void execute(GeraPedido dados){
        Orcamento orcamento = new Orcamento(dados.getValorOrcamento(), dados.getQuantidadeDeItens());
        Pedido pedido = new Pedido(dados.getCliente(), LocalDate.now(), orcamento);
        acoes.forEach(a -> a.executarAcao(pedido));
    }

E gerou essa mensagem de erro:

java: constructor Orcamento in class br.com.alura.loja.orcamento.Orcamento cannot be applied to given types;
  required: no arguments
  found:    java.math.BigDecimal,int
  reason: actual and formal argument lists differ in length

Para voltar à compilar após as alterações, eu fiz essas alterações:

    public void execute(GeraPedido dados){
        Orcamento orcamento = new Orcamento();
        orcamento.adicionarItens(new ItemOrcamento(dados.getValorOrcamento()));
        Pedido pedido = new Pedido(dados.getCliente(), LocalDate.now(), orcamento);
        acoes.forEach(a -> a.executarAcao(pedido));
    }

E mais uma coisa, na classe GeraPedido, temos o atributo quantidadeDeItens, que não é mais definido manualmente, e sim pelo tamanho da lista. Eu tirei esse atributo,mas não sei se é melhor assim ou linkar com o atributo gerado pelo Orçamento,me diga nos comentários:

Código anterior:

import java.math.BigDecimal;
import java.time.LocalDate;

public class GeraPedido {
    private String cliente;
    private LocalDate date;
    private BigDecimal valorOrcamento;
    private int quantidadeDeItens;

    public GeraPedido(String cliente, BigDecimal valorOrcamento, int quantidadeDeItens) {
        this.cliente = cliente;
        this.valorOrcamento = valorOrcamento;
        this.quantidadeDeItens = quantidadeDeItens;
    }

    public String getCliente() {
        return cliente;
    }
    public BigDecimal getValorOrcamento() {
        return valorOrcamento;
    }
    public int getQuantidadeDeItens() {
        return quantidadeDeItens;
    }
}

Novo código, sem o atributo quantidadeDeItens:

import java.math.BigDecimal;
import java.time.LocalDate;

public class GeraPedido {
    private String cliente;
    private LocalDate date;
    private BigDecimal valorOrcamento;

    public GeraPedido(String cliente, BigDecimal valorOrcamento) {
        this.cliente = cliente;
        this.valorOrcamento = valorOrcamento;
    }

    public String getCliente() {
        return cliente;
    }
    public BigDecimal getValorOrcamento() {
        return valorOrcamento;
    }
}
1 resposta
solução!

Olá, Murilo! Tudo bom?

Boa observação no projeto, obrigada por compartilhar a solução desenvolvida conosco!

Bons estudos e abraços!