4

ジェネリック配列を作成するための次の 2 つの方法を学びました。

一つは

@SuppressWarnings("unchecked")
static <T> T[] array1(final Class<T> elementType, final int size) {

    return (T[]) Array.newInstance(elementType, size);
}

そしてもう一つは

static <T> T[] array2(final Class<T[]> arrayType, final int size) {

    return arrayType.cast(Array.newInstance(arrayType.getComponentType(), size));
}

どちらが良いですか?それらは(内部的に)同じですか?実際に間違っているケースはありますか?

4

3 に答える 3

6

オプション 1Tでは のクラス オブジェクトを渡し、オプション 2T[]では のクラス オブジェクトを渡します。

オプション 1 の方が短くて読みやすいため、私はオプション 1 を好みます。繰り返しますが、キャストを追加した場合と同じArray.newInstanceなので、あなたのメソッドが多くの価値を追加するかどうかはわかりません。:-)

于 2013-06-20T03:30:15.393 に答える
2

最初のものはタイプセーフではないことに注意してください。たとえば、次の場合は ClassCastException が発生します。

array1(int.class, 5);
于 2013-06-20T23:24:41.450 に答える
0

ジェネリック配列を作成する別の (より良い) 方法

@SafeVarargs
static <E> E[] newArray(int length, E... array)
{
    return Arrays.copyOf(array, length);
}


Integer[] ints = newArray(10);

String[] strings = newArray(10); 
于 2013-06-21T01:39:02.797 に答える