两种创建通用数组的方法

时间:2013-06-20 03:28:13

标签: java arrays generics

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

一个是

@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));
}

哪个更好?它们是相同的(内部)吗?是否有任何错误?

3 个答案:

答案 0 :(得分:6)

在幕后,这两个人有效地做同样的事情,除了在选项1中你传递T的类对象而在选项2中你传递T[]的类对象。

我更喜欢选项1,因为它更短更容易阅读。然后,它与添加了强制转换的Array.newInstance相同,所以我不确定你的方法是否会增加很多价值。 : - )

答案 1 :(得分:2)

请注意,第一个不是类型安全的。例如,以下内容导致ClassCastException:

array1(int.class, 5);

答案 2 :(得分:0)

创建通用数组的另一种(更好的)方法

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


Integer[] ints = newArray(10);

String[] strings = newArray(10);