1
resposta

Não foi possível adicionar o item antigo.

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)
1 resposta

Oi Matheus,

Posta aqui um print do seu projeto, da estrutura de pacotes.