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

Método Collections.sort() não compila

package br.com.empresa.banco;

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

import br.com.empresa.banco.conta.ContaCorrente;

public class TestaOrdenacao {
    public static void main(String[] args) {
        ContaCorrente c1 = new ContaCorrente();
        c1.setSaldo(100);
        c1.setNumero(1);

        ContaCorrente c2 = new ContaCorrente();
        c2.setSaldo(200);
        c2.setNumero(2);

        ContaCorrente c3 = new ContaCorrente();
        c3.setSaldo(300);
        c3.setNumero(3);

        ContaCorrente c4 = new ContaCorrente();
        c4.setSaldo(400);
        c4.setNumero(4);

        ContaCorrente c5 = new ContaCorrente();
        c5.setSaldo(500);
        c5.setNumero(5);

        List<ContaCorrente> listaContas = new ArrayList<ContaCorrente>();
        listaContas.add(c1);
        listaContas.add(c2);
        listaContas.add(c3);
        listaContas.add(c4);
        listaContas.add(c5);

        Collections.sort(listaContas); // Eclipse não compila aqui
    }

}
2 respostas

Ok, não compila porque não havia a interface Comparable na classe ContaCorrente. Tentei implementar mas não está dando certo.

package br.com.empresa.banco.conta;

public class ContaCorrente extends Conta implements Tributavel, Comparable {

    public ContaCorrente() {

    }

    public ContaCorrente(double valor) {
        this.saldo = valor;
    }

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

    @Override
    public double calculaTributos() {
        return this.getSaldo() * 0.01;
    }


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

    //se eu tirar essa parte aqui o código não compila
    //observe acima que já implementei o método 
    @Override
    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        return 0;
    }

}

Outra coisa se faço o método compareTo como a resolução do exercício anterior também não compila. Vejam:

//Eclipse nao aceita
public int compareTo(ContaCorrente outra) {
    return this.getNumero() - outra.getNumero();
}
solução!

Geovane, o metodo compareTo ele é sobrescrito então tem que ter a anotação Override, observa você tá implementando a interface Comparable, se você tirar a anotação ira dar o erro mesmo, e uma coisa que eu vi, o comprable recebe uma classe para poder comparar, e eu não vi você passando por parametro quando você implemento o Comprable. Tenta algo

public class ContaCorrente extends Conta implements Tributavel, Comparable<ContaCorrente> {

// RESTO DO CÓDIGO

E deixa só um metodo na sua Classe, pelo jeito tem 3 metodo para o compareTo. Deixa só esse aqui.

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