Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Parece que meu typeCast não funcionou.

Olá alguém pode me ajudar? Ao fazer os exercícios, chegando na parte de imprimir com a referência e com o getNumero() "System.out.println(ref.getNumero());" aparece o erro: "The method getNumero() is undefined for the type Object", o eclipse acaba ajudando fazendo um outro cast que eu nunca tinha visto: "System.out.println(((Conta) ref).getNumero());"

package br.com.bytebank.banco.test.util;

import java.util.ArrayList;

import br.com.bytebank.banco.modelo.Conta;
import br.com.bytebank.banco.modelo.ContaCorrente;

public class Teste2 {
    public static void main(String[] args) {
        ArrayList lista = new ArrayList();

        Conta cc = new ContaCorrente(22, 11);
        lista.add(cc);

        Conta cc2 = new ContaCorrente(22, 22);
        lista.add(cc2);

        System.out.println(lista.size());

        Object ref = (Conta) lista.get(0);
    //Código abaixo inserido pelo exercíco que apresenta o erro e está comentado.
    //System.out.println(ref.getNumero());

        //Código abaixo sugerido pelo eclipse.
        System.out.println(((Conta) ref).getNumero());


    }
}
1 resposta
solução!

Olá,

Nesse caso o casting está funcionando mas o detalhe está no tipo da referência que está guardando o resultado. Vamos olhar essa linha:

Object ref = (Conta) lista.get(0);

Nela estamos pedindo para que o Java converta a referência que vem de lista.get(0), que é do tipo Object, para o tipo Conta. Mas qual o tipo da variável que está guardando o resultado do casting? Perceba que a ref é declarada como Object! Então independente do casting, o resultado vai ser armazenado como se fosse Object. Isso implica que ao fazer ref.getNumero(), o Java conclui que ref por ser um Object não tem o método getNumero() e pede o casting novamente.

Para corrigir basta alterar o tipo da variável ref para Conta:

Conta ref = (Conta) lista.get(0);

Agora você pode fazer diretamente:

System.out.println(ref.getNumero());