1
resposta

Não compila a ordem natural2

package OrdenacaoListas;

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

import Contas.Cliente;
import Contas.Conta;
import Contas.ContaCorrente;
import Contas.ContaPoupanca;

/**
 * 
 * 
 * ORDEM NATURAL
 *     É a ordem definida pelo próprio elemento da lista.
 * 
 * No nosso exemplo a classe Conta define o seu próprio critério
 *  de ordenação implementando a interface java.lang.Comparable.
 *    Nesse caso não é utilizado nenhum Comparator.
 * @author jejec
 *
 */
public class OrdemNaturalLegado {
    public static void main(String[] args) {

        Conta cc1 = new ContaCorrente(new Cliente("333444555-00"), 33);
        cc1.getTitular().setNome("Nico");
        cc1.deposita(333.0);

        Conta cc2 = new ContaPoupanca(new Cliente("213432670-55"), 44, 12);
        cc2.getTitular().setNome("Guilherme");
        cc2.deposita(444.0);

        Conta cc3 = new ContaCorrente(new Cliente("234567890-11"), 11);
        cc3.getTitular().setNome("Paulo");
        cc3.deposita(111.0);

        Conta cc4 = new ContaPoupanca(new Cliente("553667119-43"), 22, 12);
        cc4.getTitular().setNome("Ana");
        cc4.deposita(222.0);

        List<Conta> lista = new ArrayList<>();
        lista.add(cc1);
        lista.add(cc2);
        lista.add(cc3);
        lista.add(cc4);

        for (Conta conta : lista) {
            System.out.println(conta + " Nome: " + conta.getTitular().getNome());
        }
        System.out.println("--------------");

        Collections.sort(lista);//ESSA LINHA NÃO COMPILA
        //

        for (Conta conta : lista) {
            System.out.println(conta + " Nome: " + conta.getTitular().getNome());
        }
    }
}

A classe Conta:

package OrdenacaoListas;

public abstract class Conta implements Comparable<Conta>{

    //atributos
    private double saldo;
    private int agencia;
    private int numero;
    private Cliente titular;
    private static int contasCriadas = 0;

    //construtor
    public Conta(Cliente titular, int agencia) {
        contasCriadas++;
        this.titular = titular;
        this.agencia = agencia;
        //System.out.println("Criou-se uma conta.");
    }

    //getters e setters
    public static int getContasCriadas() {
        return Conta.contasCriadas;
    }

    public int getAgencia() {
        return agencia;
    }
    public void setAgencia(int agencia) {
        this.agencia = agencia;
    }

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

    public Cliente getTitular() {
        return titular;
    }

    public double getSaldo() {
        return saldo;
    }

    //metodos
    public void deposita(double valor){
        this.saldo += valor;
    }
    public void saca(double valor) throws MyExceptionConta{
        if(this.saldo < valor) {
            throw new MyExceptionConta("Hellow Exception.");
        }
        this.saldo -= valor;
    }
    public void transfere(double valor, Conta destino) throws MyExceptionConta{

            this.saca(valor);
            destino.deposita(valor);
            System.out.println(
                    "Transferencia realizada com sucesso de " + this.titular
                    + " para " + destino.titular);    

    }


    @Override
    public boolean equals(Object obj) {
        Conta c = (Conta) obj;
        if(this.agencia == c.agencia && this.titular.equals(c.titular)) {
            return true;
        }
        return false;
    }


    @Override
    public String toString() {
//        return "_CPF do titular: " + this.getTitular().getCpf() + 
//                " _Agencia: " + this.agencia;
        return this.titular + " _Agencia: " + this.agencia;
    }
}

O compareTo está implementado em ContaCorrente e ContaPoupanca, dessa forma:

@Override
     public int compareTo(Conta outra) {
        return Double.compare(this.getSaldo(), outra.getSaldo());
     }

A Exception que aparece é:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method sort(List<T>) in the type Collections is not applicable for the arguments (List<Conta>)

    at OrdenacaoListas.OrdemNaturalLegado.main(OrdemNaturalLegado.java:54)
1 resposta

Oi Gomes, Pelo que eu entendi o problema deve ser resolvido se você deixar a implementação do método compareTo somente na classe Conta. Faça esse teste e dê um retorno. Abs.