Na classe orçamento o "add"
do método adicionarItem()
não compila sem um cast para ItemOrcamento, e mesmo rodando com o cast ele joga uma exception ao tentar fazer o "novo.adicionarItem(antigo)
" no teste.
"novo.adicionarItem(novo)
" também joga a exception.
Testei também sem dar o "antigo.reprovar();
" mas também sem sucesso
Segue a classe de testes:
package br.com.alura.loja;
import java.math.BigDecimal;
import br.com.alura.loja.orcamento.ItemOrcamento;
import br.com.alura.loja.orcamento.Orcamento;
public class TestesComposicao {
public static void main(String[] args) {
Orcamento antigo = new Orcamento();
antigo.adicionarItem(new ItemOrcamento(new BigDecimal("200")));
antigo.reprovar();
Orcamento novo = new Orcamento();
novo.adicionarItem(new ItemOrcamento(new BigDecimal("500")));
novo.adicionarItem(antigo);
System.out.println(novo.getValor());
//Exception
}
E a orcamento:
package br.com.alura.loja.orcamento;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import br.com.alura.loja.orcamento.situacao.EmAnalise;
import br.com.alura.loja.orcamento.situacao.Finalizado;
import br.com.alura.loja.orcamento.situacao.SituacaoOrcamento;
public class Orcamento implements Orcavel {
private BigDecimal valor;
private SituacaoOrcamento situacao;
private List<ItemOrcamento> itens;
public Orcamento() {
this.valor = BigDecimal.ZERO;
this.situacao = new EmAnalise();
this.itens = new ArrayList<>();
}
public BigDecimal getValor() {
return valor;
}
public void setValor(BigDecimal valor) {
this.valor = valor;
}
public int getQuantidadeItens() {
return itens.size();
}
public void aplicarDescontoExtra() {
BigDecimal valorDoDescontoExtra = this.situacao.calcularValorDescontoExtra(this);
this.valor = this.valor.subtract(valorDoDescontoExtra);
}
public void aprovar() {
this.situacao.aprovar(this);
}
public void reprovar() {
this.situacao.reprovar(this);
}
public void finalizar() {
this.situacao.finalizar(this);
}
public void setSituacao(SituacaoOrcamento situacao) {
this.situacao = situacao;
}
public SituacaoOrcamento getSituacao() {
return situacao;
}
public boolean isFinalizado() {
return situacao instanceof Finalizado;
}
public void adicionarItem(Orcavel item) {
this.valor = valor.add(item.getValor());
this.itens.add(item);
}
}
Exception ao rodar o teste(com cast para ItemOrcamento, caso contrario nao compila):
Exception in thread "main" java.lang.ClassCastException: class br.com.alura.loja.orcamento.Orcamento cannot be cast to class br.com.alura.loja.orcamento.ItemOrcamento (br.com.alura.loja.orcamento.Orcamento and br.com.alura.loja.orcamento.ItemOrcamento are in unnamed module of loader 'app')
at br.com.alura.loja.orcamento.Orcamento.adicionarItem(Orcamento.java:67)
at br.com.alura.loja.TestesComposicao.main(TestesComposicao.java:18)