Pourquoi cette création de groupe de génériques ne fonctionne-t-elle pas comme prévu?

J’ai le code suivant où je crée un tableau et tente d’y stocker des objects. Au moment de l’exécution, je reçois une ArrayStoreException .

 import java.lang.reflect.Array; public class GenericsArrayCreation { public static  void Test(T[] A){ @SuppressWarnings("unchecked") T[] temp = (T[]) Array.newInstance(A.getClass(), A.length); for(int i = 0;i<temp.length;i++){ temp[i] = A[i]; System.out.println(temp[i].toString()); } } public static void main(String[] args){ String[] strs = {"a", "b", "c"}; GenericsArrayCreation.Test(strs); } } 

Je comprends en quelque sorte que c’est à cause de la déclaration

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

Pourquoi est-ce faux? A.getClass() à l’exécution renvoie une Ssortingng . temp doit donc être un tableau de chaînes. Dans ce cas, pourquoi l’assignation temp[i] = A[i] ne fonctionne pas?

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

Vous voulez le type de composant du tableau plutôt que le type de tableau lui-même.

Utilisez cette ligne à la place:

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

et le code fonctionne bien.

Essayez d’imprimer temp.getClass() – c’est un tableau de tableaux, T[][] . Vous voudrez Class.getComponentType .

votre A.getClass() renvoie un tableau Ssortingng et non Ssortingng , raison pour laquelle vous obtenez ArrayStoreException .