113 votes

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 se produit aussi quand v2 est Object [0] et aussi quand il y a des Strings. Une idée pourquoi?

259voto

MeBigFatGuy Points 12489

C'est parce que lorsque vous utilisez

 toArray() 

elle renvoie un Objet[], qui ne peut pas être converti en Chaîne de caractères[] (même quand le contenu sont des Chaînes de caractères) C'est parce que la méthode toArray obtient seulement une

List 

et pas

List<String>

comme les génériques sont une source code seule chose, et ne sont pas disponibles au moment de l'exécution et ne peut donc pas déterminer quel type de tableau pour créer.

utilisation

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

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

36voto

Dilum Ranatunga Points 7677

Vous utilisez le mauvais toArray()

Rappelez-vous que Java est les génériques sont pour la plupart sucre syntaxique. Une liste de tableaux n'est pas réellement de savoir que tous ses éléments sont des Chaînes de caractères.

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

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

Notez que le généricisés forme toArray(T[]) retours T[], de sorte que le résultat n'a pas besoin d'être explicitement exprimés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X