4

我已经学习了以下两种创建通用数组的方法。

一个是

@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

在幕后,这两者实际上做了同样的事情,除了在选项 1 中你传入T's 类对象和在选项 2 中你传入T[]'s 类对象。

我更喜欢选项 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 回答