Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida no Ex. 2 da Aula 5 - Collections framework

Não compila. Apontei onde os erros aparecem com (*).

Classe Conta :

package conta;

import sistema.ValorInvalidoException;

abstract public class Conta implements Comparable{

    protected int numero;
    protected double saldo;
    protected String name;

    public Conta(double saldo) {
        this.saldo = saldo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void deposita(double valor) throws ValorInvalidoException {
        if(valor < 0){
            throw  new ValorInvalidoException(valor);
        } else {
            this.saldo += valor;
        }
    }

    public double getSaldo() {
        return this.saldo;
    }

    public void saca(double valor) {
        this.saldo -= valor;
    }

    abstract public void atualiza(double taxa);

    public String toString() {
        return "Esse objeto e uma conta com saldo: " + this.saldo;
    }

    public boolean equals(Object obj) {
        Conta outraConta = (Conta) obj;
        return this.numero == outraConta.numero && this.name == outraConta.name;
    }

    public int getNumero() {
        return this.numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

}

Classe ContaPoupanca :

package conta;

public class ContaPoupanca extends Conta {

    public ContaPoupanca(double saldo) {
        super(saldo);
    }

    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa * 3;
    }

    public int compareTo(Object outra) {
        ***if(this.saldo > outra.saldo) return -1;
        ***if(this.saldo < outra.saldo) return 1;
        return 0;
    }


}

Classe Principal :

package banco;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import conta.Conta;
import conta.ContaCorrente;
import conta.ContaPoupanca;
import outros.Tributavel;
import sistema.AtualizadorDeContas;
import sistema.ValorInvalidoException;

public class Principal {
    public static <T> void main(String[] args) throws ValorInvalidoException {

        ArrayList<Conta> contas = new ArrayList<Conta>();

        ContaCorrente cc = new ContaCorrente(100.0);
        cc.setName("Renan");
        cc.deposita(300.0);
        cc.atualiza(0.5);
        cc.setNumero(1200);
        System.out.println("Conta Corrente atualizada : " + cc.getName() + " apresenta " + cc.getSaldo());

        ContaPoupanca cp = new ContaPoupanca(100.0);
        cp.setName("Renato e Alex Sandra");
        cp.deposita(300.0);
        cp.atualiza(0.5);
        cp.setNumero(1200);
        System.out.println("Conta Poupanca atualizada : " + cp.getName() + " apresentam " + cp.getSaldo());

        contas.add(cp);
        contas.add(cp);

        ***Collections.sort(contas);

        for(Conta c : contas){
            System.out.println(c);
        }

        AtualizadorDeContas atualizador = new AtualizadorDeContas(0.5);
        atualizador.roda(cc);
        atualizador.roda(cp);

        Tributavel t = cc;
        System.out.println(t.calculaTributos());


    }
}
4 respostas
solução!

Olá Igor! O erro está sendo gerado pois sua implementação da interface Comparable não esta correta. Veja bem, quando implementamos a interface Comparable devemos passar o tipo que desejamos comparar, logo sua classe Conta deveria estar da seguinte forma:

public abstract class Conta implements Comparable<Conta>

Assim o método compareTo deveria estar na classe Conta e não na classe ContaPoupanca, e este deveria receber como argumento um objeto Conta e não um Object, ficando assim:

@Override
    public int compareTo(Conta outra) {
        if(this.saldo > outra.saldo) return -1;
        if(this.saldo < outra.saldo) return 1;
        return 0;
    }

Fazendo estas modificações, creio que seu código irá funcionar. Espero ter ajudado! Bons Estudos!

Obrigado !

Mas quando faço isso, ele pede para que ambas classes filhas passem para abstratas

Funcionou agora, devia ser algum bug do Eclipse