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?
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)
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.
String [] str = new String [list.size ()];
str = (String []) list.toArray (str);
Utilisez comme ça.