Casting d'un tableau d'objets en tableau d'entiers : une énigme ClassCastException
Dans le domaine de la programmation Java, la conversion d'un tableau d'un type en un autre peut conduisent souvent à la confusion, en particulier lorsqu'il s'agit de tableaux de primitives et d'objets. Examinons de plus près l'extrait de code suivant :
<code class="java">Object[] a = new Object[1]; Integer b = 1; a[0] = b; Integer[] c = (Integer[]) a;</code>
Lorsque vous tentez d'exécuter ce code, vous pouvez rencontrer une ClassCastException à la dernière ligne. Pourquoi est-ce ainsi ?
Le problème réside dans les types de tableaux incompatibles. Integer[] est un sous-type de Object[], ce qui signifie qu'un tableau d'entiers peut être attribué en toute sécurité à un tableau d'objets. Cependant, l’inverse n’est pas vrai. Object[] ne peut pas être traité comme Integer[].
Pour résoudre ce problème, vous ne pouvez pas simplement convertir le tableau Object en un tableau Integer. Au lieu de cela, vous pouvez utiliser les méthodes Arrays.copyOf() ou Arrays.copyOfRange() pour créer explicitement un nouveau tableau d'entiers avec le contenu souhaité.
<code class="java">// Using Arrays.copyOf() Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class); // Using Arrays.copyOfRange() Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class);</code>
Vous pouvez également déclarer un tableau d'entiers à partir du dès le départ et attribuez-le au tableau Object :
<code class="java">Object[] a = new Integer[1]; Integer b = 1; a[0] = b;</code>
Dans ce scénario, aucune ClassCastException ne se produira.
Ainsi, pour réussir à convertir un tableau Object en un tableau Integer, il est impératif d'utiliser les méthodes appropriées ou assurez-vous que le tableau Object ne contient que des entiers.
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!