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

Estou com dúvida no curso de Java e suas Bibliotecas, no exercício 2 do capítulo Collections framework.

No Eclipse o código não compilou quando eu fiz da seguinte maneira:

public class ContaPoupanca extends Conta implements Comparable<ContaPoupanca>{
// resto do codigo
}

Com a seguinte mensagem:

The interface Comparable cannot be implemented more than once with different arguments: Comparable and Comparable

Mas agora eu não entendi pois na resposta do exercício a classe foi implementada desta forma.

4 respostas

Coloca aí toda a classe, para vermos como ficou.

A classe Conta:

package br.com.alura.fj11.modelo;

import br.com.alura.fj11.excecao.ValorInvalidoException;

public abstract class Conta implements Comparable<Conta> {

    protected double saldo;
    protected double taxa;
    protected int numero;
    protected String nome;

    public abstract void atualiza(double taxa);


    public int getNumero() {
        return numero;
    }


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


    /**
     * realiza o saque na aplicação
     * @param valor valor a ser sacado
     * @return caso saldo ser insuficiente
     */
    public double sacar(double valor){
        if(valor > this.saldo){
            throw new ValorInvalidoException(saldo);
        }
        return this.saldo -= valor; 
    }

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

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



    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        long temp;
        temp = Double.doubleToLongBits(saldo);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }


    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Conta other = (Conta) obj;
        if (Double.doubleToLongBits(saldo) != Double
                .doubleToLongBits(other.saldo))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "O saldo é: " + this.saldo;
    }

     public void invertePalavrasDaFrase(String texto) {
         String[] palavras = texto.split(" ");
         for (int i = palavras.length - 1; i >= 0; i--) {
             System.out.print(palavras[i] + " ");
         }
         System.out.println("");
     }

     public void imprimeLetraPorLetra(String texto) {
         for (int i = 0; i < texto.length(); i++) {
             System.out.println(texto.charAt(i));
         }
     }

     public void inverte(String texto) {
         for (int i = texto.length() - 1; i >= 0; i--) {
             System.out.print(texto.charAt(i));
         }
         System.out.println("");
     }

     public void inverteComStringBuilder(String texto) {
//         System.out.print("\t");
         StringBuilder invertido = new StringBuilder(texto).reverse();
         System.out.println(invertido);
     }


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

A classe ContaPoupanca:

package br.com.alura.fj11.modelo;

public class ContaPoupanca extends Conta implements Comparable<Conta>{

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

    public void depositar(double valor){
         this.saldo += this.saldo + valor - 0.1;
    }

    @Override
    public int compareTo(Conta outra) {
              return this.getNumero() - outra.getNumero();
    }



}
solução!

Olá Guilherme

Veja que no seu código a classe Conta já implementa a interface Comparable, então como ContaPoupanca herda de Conta, ela também, automaticamente, herda a interface Comparable e por isso o compilador fala que você está implementando a interface mais de uma vez.

Para corrigir o seu código, tire o implements Comparable<ContaPoupanca> da declaração da classe ContaPoupanca:

// ContaPoupanca já é Comparable por que Conta
// implementa a interface
public class ContaPoupanca extends Conta{
   // implementação
}

public class ContaPoupanca extends Conta implements Comparable {

...

@Override public int compareTo(ContaPoupanca outra) { return this.getNumero() - outra.getNumero(); } }