web-dev-qa-db-fra.com

java: (String []) List.toArray () donne ClassCastException

Le code suivant (sous Android) me donne toujours une exception ClassCastException à la 3ème ligne:

final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();

Cela arrive aussi quand v2 est Object [0] et aussi quand il y a des Strings dedans . Une idée pourquoi?

82
Gavriel

C'est parce que quand vous utilisez

 toArray() 

il retourne un Object [], qui ne peut pas être transtypé en String [] (même si le contenu est en Strings) C'est parce que la méthode toArray n'obtient qu'un 

List 

et pas 

List<String>

comme les génériques sont une chose uniquement dans le code source, et ne sont pas disponibles au moment de l'exécution et ne peuvent donc pas déterminer le type de tableau à créer.

utilisation

toArray(new String[v2.size()]);

qui alloue le bon type de tableau (String [] et de la bonne taille)

219
MeBigFatGuy

Vous utilisez la mauvaise toArray()

Rappelez-vous que les génériques de Java sont principalement du sucre syntaxique. Une ArrayList ne sait pas réellement que tous ses éléments sont des chaînes.

Pour résoudre votre problème, appelez toArray(T[]) . Dans ton cas,

String[] v3 = v2.toArray(new String[v2.size()]);

Notez que le formulaire générique toArray(T[]) renvoie T[]; le résultat n'a donc pas besoin d'être converti explicitement.

31
Dilum Ranatunga

String [] str = new String [list.size ()];

str = (String []) list.toArray (str);

Utilisez comme ça.

0
MakNe