配列を作成してオブジェクトを格納しようとしている次のコードがあります。実行時に、ArrayStoreException
.
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);
}
}
これは声明のせいだとなんとなくわかります
T[] temp = (T[]) Array.newInstance(A.getClass(), A.length);
なぜこれが間違っているのですか?A.getClass()
実行時に を返すためString
、temp
文字列の配列である必要があります。その場合、割り当てが機能しtemp[i] = A[i]
ないのはなぜですか?