Java コレクション フレームワークでは、Collection インターフェイスは次のメソッドを宣言します。
このコレクション内のすべての要素を含む配列を返します。返される配列の実行時型は、指定された配列のものです。コレクションが指定された配列に収まる場合は、そこに返されます。それ以外の場合は、指定された配列の実行時の型とこのコレクションのサイズで新しい配列が割り当てられます。
このメソッドを実装したい場合、実行時にのみ認識されるa型の配列をどのように作成しますか?
Java コレクション フレームワークでは、Collection インターフェイスは次のメソッドを宣言します。
このコレクション内のすべての要素を含む配列を返します。返される配列の実行時型は、指定された配列のものです。コレクションが指定された配列に収まる場合は、そこに返されます。それ以外の場合は、指定された配列の実行時の型とこのコレクションのサイズで新しい配列が割り当てられます。
このメソッドを実装したい場合、実行時にのみ認識されるa型の配列をどのように作成しますか?
静的メソッドを使用する
java.lang.reflect.Array.newInstance(Class<?> componentType, int length)
その使用に関するチュートリアルは、http: //java.sun.com/docs/books/tutorial/reflect/special/arrayInstance.htmlにあります。
ArrayListがどのようにそれを行うかを見ると:
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
Array.newInstance(Class componentType, int length)
ジェネリック型 (実行時にのみ認識される) の新しい配列を作成するには、オブジェクトの配列を作成し、単純にそれをジェネリック型にキャストしてから使用する必要があります。これは、Java のジェネリック実装 (消去) の制限です。
T[] newArray = (T[]) new Object[X]; // where X is the number of elements you want.
次に、関数は (a) で指定された配列を取得し、それを使用する (事前にサイズをチェックする) か、新しい配列を作成します。