ArrayList
ジェネリック型の をジェネリック型の配列(同じジェネリック型)に変換したい。たとえば、私は を持っていてArrayList<MyGeneric<TheType>>
、取得したいと考えていMyGeneric<TheType>[]
ます。
toArray
メソッドとキャストを使用してみました:
(MyGeneric<TheType>[]) theArrayList.toArray()
しかし、これはうまくいきません。私の他のオプションは、配列を作成しMyGeneric<TheType>
、arraylist の要素を 1 つずつ挿入して、それらを正しい型にキャストすることです。しかし、この配列を作成しようとしたことはすべて失敗しました。
使用する必要があることはわかっていますArray.newInstance(theClass, theSize)
が、のクラスを取得するにはどうすればよいMyGeneric<TheType>
ですか? これを使用して:
Class<MyGeneric<TheType>> test = (new MyGeneric<TheType>()).getClass();
動作しません。IDE は、Class<MyGeneric<TheType>>
とClass<? extends MyGeneric>
は互換性のない型であると述べています。
これを行う:
Class<? extends MyGeneric> test = (new MyGeneric<TheType>()).getClass();
MyGeneric[] data = (MyGeneric[]) Array.newInstance(test, theSize);
for (int i=0; i < theSize; i++) {
data[i] = theArrayList.get(i);
}
return data;
ClassCastException
の行でaを上げdata[i] = ...
ます。
私は何をすべきか?
ノート:
サードパーティのライブラリで使用する必要があるため、配列が必要なので、「ここにコレクションの名前を挿入する」というオプションはありません。