2
respostas

Erro não simulado no uso de Type Cast

No item abaixo (https://cursos.alura.com.br/course/java-util-lambdas/task/38960) informa um possível erro ao acessar a posição contas[1]. Porém, verifiquei que o possível erro não existe, confere essa informação? Obrigado!

4 - Experimente agora acessar o elemento na posição contas[1]. Como em tempo de execução ele é do tipo ContaPoupanca, o cast não funcionará e um exceção será lançada no console.

2 respostas

Oi Hézio, tudo tranquilo?

Como ficou as classes das suas contas?

Teoricamente, deveria dar um erro, pois cc1 é uma ContaCorrente, enquanto cc2 é uma ContaPoupanca. Então, quando tentamos guardar cc2 dentro da referência da ContaCorrente, o Java não deveria ser capaz de converter cc2 para uma ContaCorrente, já que embora ambas sejam Contas, elas ainda assim são de tipos diferentes.

Veja se faz sentido e me avisa se o problema persistir!

Bons estudos!!

Olá, Thiago. Tudo tranquilo graças a Deus.

Faz sentido o que você falou porém o array de contas na posição contas[1] continua uma Conta[] e o cast é apenas na posição contas[0].

package br.com.bytebank.banco.test;

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

public class TestArrayReferencias {

    public static void main(String[] args) {

        // alterando o tipo
        Conta[] contas = new Conta[5];
        ContaCorrente cc1 = new ContaCorrente(22, 11);
        contas[0] = cc1;

        // cria instância de ContaPoupanca
        ContaPoupanca cc2 = new ContaPoupanca(22, 22);
        contas[1] = cc2;

        System.out.println(contas[1].getNumero());

        // alterou o tipo, realizando o cast
        ContaCorrente ref = (ContaCorrente) contas[0];
        System.out.println(cc2.getNumero());
        System.out.println(ref.getNumero());
    }
}

Fiz uma alteração conforme o código abaixo aí gerou o erro como já era esperado.

Exception in thread "main" java.lang.ClassCastException: br.com.bytebank.banco.modelo.ContaPoupanca cannot be cast to br.com.bytebank.banco.modelo.ContaCorrente
    at br.com.bytebank.banco.test.TestArrayReferencias.main(TestArrayReferencias.java:25)
package br.com.bytebank.banco.test;

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

import br.com.bytebank.banco.modelo.ContaPoupanca;

public class TestArrayReferencias {

    public static void main(String[] args) {

        // alterando o tipo
        Conta[] contas = new Conta[5];
        ContaCorrente cc1 = new ContaCorrente(22, 11);
        contas[0] = cc1;

        // cria instância de ContaPoupanca
        ContaPoupanca cc2 = new ContaPoupanca(22, 22);
        contas[1] = cc2;

        System.out.println(contas[1].getNumero());

        // alterou o tipo, realizando o cast
        ContaCorrente ref = (ContaCorrente) contas[0];
        ContaCorrente ref1 = (ContaCorrente) contas[1];

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