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

1. Introduction

ClassCastException est une exception d'exécution déclenchée en Java lorsque nous essayons de convertir incorrectement une classe d'un type à un autre. Il est lancé 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 ici.

2. Détails de ClassCastException

Jetons d'abord un coup d'œil à 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 provoque ClassCastException où nous convertissons la valeur de retour de Arrays.asList (strArray) en ArrayList.

La raison est que bien que la méthode statique Arrays.asList () retourne une liste, nous ne savons pas avant l'exécution exactement quelle implémentation est retournée . Donc, au moment de la compilation, le compilateur ne peut pas savoir non plus et autorise la distribution .

Lorsque le code s'exécute, l'implémentation réelle est vérifiée, ce qui trouve que Arrays.asList () renvoie un Arrays $ List provoquant ainsi une ClassCastException .

3. Résolution

Nous pouvons simplement déclarer notre ArrayList en tant que List 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 que List, nous pouvons affecter n'importe quelle classe qui implémente l' interface List , y compris les Arrays $ ArrayList renvoyés par l'appel de méthode.

4. Résumé

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

Le code complet est disponible à l'adresse over sur GitHub.