Ho il seguente codice in cui sto creando un array e sto provando a memorizzare oggetti in esso. In fase di esecuzione, ottengo un ArrayStoreException
.Perché questa generazione di generici non funziona come previsto?
import java.lang.reflect.Array;
public class GenericsArrayCreation<T> {
public static <T> 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);
}
}
qualche modo capito che questo è a causa della dichiarazione
T[] temp = (T[]) Array.newInstance(A.getClass(), A.length);
Perché è questo che non va? A.getClass()
al runtime restituisce un String
, quindi temp
deve essere un array di stringhe. In tal caso, perché l'assegnazione temp[i] = A[i]
non funziona?
Hai confermato (con un debugger o un'istruzione 'print') che' A.getClass() 'è' String'? – chrylis