8
votes

Pourquoi cette création de Generics Array ne fonctionne-t-elle pas comme prévu?

J'ai le code suivant où je crée un tableau et j'essaie de stocker des objets dedans. Au moment de l'exécution, je reçois un ArrayStoreeException code>.

T[] temp = (T[]) Array.newInstance(A.getClass(), A.length);


1 commentaires

Avez-vous confirmé (avec un débogueur ou impression instruction) que a.getclass () est chaîne ?


3 Réponses :


0
votes

Essayez l'impression temp.getclass () - c'est un tableau de tableaux, T [] [] . Vous voudrez classe.getComponenttype .


3 commentaires

Non. La DOC dit: Si ComponentType représente une classe de tableau, le nombre de dimensions de la nouvelle matrice est égal à la somme des dimensions.Length et le nombre de dimensions du composantType. Dans ce cas, le type de composant de la nouvelle matrice est le type de composantype.


@ nes1983 quoi? "renvoie la classe représentant le type de composant d'un tableau. Si cette classe ne représente pas une classe de matrice, cette méthode renvoie NULL."


Honnêtement, je pense que cette API suce.



6
votes

Le type de A est java.lang.string [] , plutôt que java.lang.string .

Vous voulez Le type de composant de la matrice, plutôt que le type de matrice elle-même.

Utilisez cette ligne à la place: xxx

et le code fonctionne bien.


1 commentaires

Merci! Cela a corrigé!



0
votes

Votre a.getclass () retourne un chaîne tableau et non string , c'est pourquoi vous obtenez arraystoreexception .


0 commentaires