ClassCastException: matrizes $ ArrayList não podem ser convertidas em ArrayList
1. Introdução
ClassCastException é uma exceção de tempo de execução levantada em Java quando tentamosimproperly cast a class from one type to another.. É lançado para indicar que o código tentou lançar um objeto para uma classe relacionada, mas da qual não é uma instância.
Para uma introdução mais detalhada às exceções em Java, dê uma olhada emhere.
2. Detalhes de ClassCastException
Primeiro, vamos dar uma olhada em um exemplo simples. Considere o seguinte snippet de código:
String[] strArray = new String[] { "John", "Snow" };
ArrayList strList = (ArrayList) Arrays.asList(strArray);
System.out.println("String list: " + strList);
O código acima causaClassCastException onde lançamos o valor de retorno deArrays.asList(strArray) paraArrayList.
O motivo é que, embora o método estáticoArrays.asList() retorne umList,we don’t know until runtime exactly what implementation is returned. Então, em tempo de compilação, o compilador também não pode saber e permite o cast.
Quando o código é executado, a implementação real é verificada, descobrindo queArrays.asList () retorna umArrays$List, causando assim umClassCastException.
3. Resolução
Podemos simplesmente declarar nossoArrayList comoList para evitar esta exceção:
List strList = Arrays.asList(strArray);
System.out.println("String list: " + strList);
No entanto, declarando nossa referência comoList, podemos atribuirany class that implements the List interface, incluindoArrays$ArrayList retornado pela chamada do método.
4. Sumário
Neste artigo, vimos a explicação do que exatamente é umClassCastExceptione quais medidas temos que tomar para corrigir esse problema.
O código completo pode ser encontradoover on GitHub.