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

Necessidade de Casting usando generics

Mesmo utilizando generics o Eclipse indica que eu preciso dar casting na conta poupança (mesmo sendo declarado que na List só vai entrar ContaPoupança). A pergunta é: pq tenho que fazer esse casting mesmo indicando que ali só entrará ContaPoupança?

package br.com.empresa.banco.conta;

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

public class TestaOrdenacao {

    public static void main(String[] args) {
        Conta cp1 = new ContaPoupança();
        Conta cp2 = new ContaPoupança();
        Conta cp3 = new ContaPoupança();

        cp1.setNumero(1);
        cp2.setNumero(4);
        cp3.setNumero(2);

        List<ContaPoupança> contas = new ArrayList<>();

        contas.add(cp1);  //no quickfix ele indica que ou devo fazer casting!
        contas.add(cp2);
        contas.add(cp3);

        System.out.println(contas);

        Collections.sort(contas);

        System.out.println(contas);

    }

}
3 respostas

Oi Lucas, tudo bem ?

Cara provavelmente sua classe ContaPoupanca ainda não é uma conta, ou seja, você não extendeu.

Confirma para gente ?

Olá Matheus, Segue o código. Eu havia feito a extensão sim. Resolvi o problema fazendo

ContaPoupança  cpx = new ContaPoupança;

Porém, ao declarar

Conta cpx = new ContaPoupança;

Ele pede para fazer o casting ou mudar Conta para ContaPoupança (ou colocar o comando addAll).

Quanto a classe ContaPoupança, ela está como herdeira de Conta

package br.com.empresa.banco.conta;

public class ContaPoupança extends Conta implements Comparable<ContaPoupança> {
    public void atualiza(double taxa) {
        this.saldo = this.saldo + (this.saldo * taxa * 3);
    }

    public int compareTo (ContaPoupança outra){
        return this.getNumero() - outra.getNumero();
    }

}

Apesar de resolvido o problema, a dúvida persiste. Por que ele não reconheceu que a Conta era uma ContaPoupança, dessa forma pedindo para eu fazer ou casting ou mudar a referência do objeto?

solução!

Lucas, entendi o problema

Cara no seu compareTo, você tá comparando se a Conta é igual a ContaPoupanca, repare que não é bem isso.

Toda conta poucança é uma conta, mas nem todas as contas são contas poupança.

O seu método devia ser algo similar a isso :

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