Compreendendo a conversão explícita e ClassCastException em Java
Em Java, podemos usar conversão explícita para atribuir um objeto de superclasse a uma variável de subclasse. Por exemplo, considere o seguinte código:
public class Animal { public void eat() {} } public class Dog extends Animal { public void eat() {} public static void main(String[] args) { Animal animal = new Animal(); Dog dog = (Dog) animal; } }
Embora o código seja compilado com sucesso, a execução da linha Dog dog = (Dog) animal; lança uma ClassCastException em tempo de execução.
Por que esse erro ocorre?
O compilador permite a conversão explícita, mas não pode garantir a validade da conversão em tempo de compilação. Quando você converte um objeto de uma superclasse para uma subclasse, você está essencialmente instruindo o compilador a confiar que o objeto é na verdade uma instância da subclasse.
Em nosso exemplo, a variável animal é uma instância do Animal aula. No entanto, convertê-lo para um objeto Dog pressupõe implicitamente que animal está fazendo referência a um objeto Dog, o que não é o caso. Portanto, a JVM valida essa suposição em tempo de execução e lança uma ClassCastException quando falha.
Como podemos evitar tais erros?
Para realizar a conversão explícita com segurança, devemos execute as seguintes verificações:
Em resumindo, a conversão explícita nos permite substituir a verificação de tipo do compilador, mas é essencial abordá-la com cautela e verificar a validade da conversão antes de confiar em isto.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3