Maison  >  Article  >  Java  >  Pourquoi `List.toArray()` lance-t-il une `ClassCastException` dans Android lors de la diffusion vers `String[]` ?

Pourquoi `List.toArray()` lance-t-il une `ClassCastException` dans Android lors de la diffusion vers `String[]` ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 10:49:02826parcourir

Why Does `List.toArray()` Throw a `ClassCastException` in Android When Casting to `String[]`?

ClassCastException sur (String[])List.toArray() dans Android

Lors de la tentative de diffusion d'une ArrayList à un String[] à l'aide de la méthode toArray(), les applications Android rencontrent généralement une ClassCastException. Par exemple, le code suivant déclenche cette erreur :

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

Cela se produit quel que soit le contenu de la v2 (même un tableau vide).

Explication

Cette erreur se produit car toArray() renvoie un Object[], pas un String[]. Les génériques ne sont disponibles qu'au moment de la compilation, de sorte que la machine virtuelle Java (JVM) ne peut pas déterminer le type de tableau à créer. Par conséquent, la valeur par défaut est Object[], qui ne peut pas être converti en String[].

Solution

Pour résoudre ce problème, spécifiez explicitement le type de tableau à l'aide de toArray(T[] a) et fournissez le type de tableau souhaité en tant que paramètre. Par exemple, ce code créera correctement un String[] :

<code class="java">String[] v3 = v2.toArray(new String[v2.size()]);</code>

Cette méthode garantit que le tableau renvoyé sera du type et de la taille corrects.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn