ClassCastException: les tableaux $ ArrayList ne peuvent pas être convertis en tableau ArrayList

ClassCastException: les tableaux $ ArrayList ne peuvent pas être convertis en tableau ArrayList

1. introduction

ClassCastException est une exception d'exécution déclenchée en Java lorsque nous essayons deimproperly cast a class from one type to another. Elle est lancée pour indiquer que le code a tenté de convertir un objet en une classe associée, mais dont il n'est pas une instance.

Pour une introduction plus approfondie aux exceptions en Java, jetez un œil àhere.

2. Détails ClassCastException

Prenons d'abord un exemple simple. Considérez l'extrait de code suivant:

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

Le code ci-dessus provoqueClassCastException où nous convertissons la valeur de retour deArrays.asList(strArray) enArrayList.

La raison en est que bien que la méthode statiqueArrays.asList() renvoie unList,we don’t know until runtime exactly what implementation is returned. Donc, au moment de la compilation, le compilateur ne peut pas savoir non plus et autorise le cast.

Lorsque le code s'exécute, l'implémentation réelle est vérifiée qui trouve queArrays.asList () renvoie unArrays$List provoquant ainsi unClassCastException.

3. Résolution

Nous pouvons simplement déclarer nosArrayList comme desList pour éviter cette exception:

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

Cependant, en déclarant notre référence en tant queList, nous pouvons attribuerany class that implements the List interface, y compris lesArrays$ArrayList renvoyés par l'appel de méthode.

4. Sommaire

Dans cet article, nous avons vu l'explication de ce qu'est exactement unClassCastException et des mesures que nous devons prendre pour résoudre ce problème.

Le code complet peut être trouvéover on GitHub.