moulage de l'Objet de tableau de tableau d'Entiers erreur
Quel est le problème avec le code suivant?
Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
Le code a l'erreur suivante lors de la dernière ligne :
Exception in thread "main" java.lang.ClassCastException:
[Ljava.lang.Objet; ne peut pas être jeté à l' [Ljava.lang.Integer;
Vous devez vous connecter pour publier un commentaire.
Ross, vous pouvez utiliser des Tableaux.copyof() ou de Tableaux.copyOfRange() aussi.
Voici la raison pour frapper un
ClassCastException
est que vous ne pouvez pas traiter un tableau deInteger
comme un tableau deObject
.Integer[]
est un sous-type deObject[]
maisObject[]
n'est pas unInteger[]
.Et la suite ne sera pas aussi donner un
ClassCastException
.Arrays.copyOf
ne jetez jamais une ClassCastException?Vous ne pouvez pas jeter un
Object
tableau à uneInteger
tableau. Vous disposez d'une boucle sur tous les éléments de l'un et de fonte de chacun d'eux individuellement.Edit: je crois que la justification de cette restriction est que lors de la coulée, la JVM veut assurer la sécurité du type à l'exécution. Depuis un tableau de
Objects
peut être n'importe quoi d'ailleursIntegers
, la JVM aurait à faire ce que le code ci-dessus est faites de toute façon (voir chaque élément individuellement). La langue de créateurs ont décidé qu'ils ne voulaient pas la JVM pour le faire (je ne sais pas pourquoi, mais je suis sûr que c'est une bonne raison).Cependant, vous pouvez jeter un sous-type tableau à une supertype array (par exemple
Integer[]
àObject[]
)!Ou effectuer les opérations suivantes:
Arrays.asList(objectArray).toArray(new Integer[objectArray.length])
, mais alors, ce n'est exactement le même que namalfernandolk réponse inutile de frais générauxvous essayez de lancer un Tableau d'Objet à jeter dans un Tableau d'Entiers. Tu ne peux pas faire. Ce type de abattu n'est pas autorisée.
Vous pouvez faire un tableau d'Entiers, et après que de copier toutes les valeurs du premier tableau dans le second tableau.
Lors de la coulée est fait en Java, Java compilateur ainsi que d'exécution Java vérifier si le casting est possible ou pas et jette les erreurs dans cas pas.
Lors de la conversion de types d'Objet, le
instanceof
test doit passer pour que la cession d'aller à travers.Dans votre exemple, il en résulte
Object[] a = new Object[1];
boolean isIntegerArr = a instanceof Integer[]
Si vous faites un
sysout
de la ligne ci-dessus, il serait return false;Donc, essayer une instance de vérifier avant l'incantation de l'aide.
Donc, pour corriger l'erreur, vous pouvez soit ajouter "instanceof" vérifier
ET
utiliser la ligne de code suivante:
(Arrays.asList(a)).toArray(c);
Veuillez noter que le code ci-dessus serait un échec, si l'Objet tableau contient une entrée qui n'est autre que Entier.