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;
}
}