我已经学习了两种创建通用数组的方法。
一个是
@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));
}
哪个更好?它们是相同的(内部)吗?是否有任何错误?
答案 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);