ClassCastException: Arrays $ ArrayList no se puede convertir a ArrayList

1. Introducción

ClassCastException es una excepción de tiempo de ejecución que se genera en Java cuando intentamos convertir incorrectamente una clase de un tipo a otro. Se lanza para indicar que el código ha intentado convertir un objeto en una clase relacionada, pero de la cual no es una instancia.

Para obtener una introducción más detallada a las excepciones en Java, eche un vistazo aquí.

2. Detalles de ClassCastException

Primero, echemos un vistazo a un ejemplo simple. Considere el siguiente fragmento de código:

String[] strArray = new String[] { "John", "Snow" }; ArrayList strList = (ArrayList) Arrays.asList(strArray); System.out.println("String list: " + strList);

El código anterior causa ClassCastException donde lanzamos el valor de retorno de Arrays.asList (strArray) a un ArrayList.

La razón es que aunque el método estático Arrays.asList () devuelve una Lista, no sabemos hasta el tiempo de ejecución exactamente qué implementación se devuelve . Entonces, en el momento de la compilación, el compilador tampoco puede saberlo y permite la transmisión .

Cuando se ejecuta el código, se verifica la implementación real, lo que encuentra que Arrays.asList () devuelve una lista de $ de matrices, lo que provoca una excepción ClassCastException .

3. Resolución

Simplemente podemos declarar nuestra ArrayList como una lista para evitar esta excepción:

List strList = Arrays.asList(strArray); System.out.println("String list: " + strList);

Sin embargo, al declarar nuestra referencia como una Lista , podemos asignar cualquier clase que implemente la interfaz Lista , incluidas las Arrays $ ArrayList devueltas por la llamada al método.

4. Resumen

En este artículo, hemos visto la explicación de qué es exactamente una ClassCastException y qué medidas tenemos para tomar para solucionar este problema.

El código completo se puede encontrar en GitHub.