8

配列を作成してオブジェクトを格納しようとしている次のコードがあります。実行時に、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()実行時に を返すためStringtemp文字列の配列である必要があります。その場合、割り当てが機能しtemp[i] = A[i]ないのはなぜですか?

4

3 に答える 3

6

のタイプAjava.lang.String[]ではなく ですjava.lang.String

配列型自体ではなく、配列のコンポーネント型が必要です。

代わりに次の行を使用してください。

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

コードは正常に実行されます。

于 2013-08-15T09:49:16.897 に答える
0

印刷してみてくださいtemp.getClass()- 配列の配列ですT[][]。あなたがしたいでしょうClass.getComponentType

于 2013-08-15T09:38:31.533 に答える
0

あなたは配列をA.getClass()返しますが、それがあなたが得ている理由です。StringStringArrayStoreException

于 2013-08-15T09:49:28.757 に答える