你要知道各个参数的含义
copyOf(U[] original, int newLength, Class<? extends T[]> newType)
由U类型复制为T类型?
original - 要复制的数组
newLength - 要返回的副本的长度
newType - 要返回的副本的类型
意思是你要把U数组里面的各个元素转换成T类型的元素,然后返回一个T类型的数组
源代码如下
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
所以你应该这么写Arrays.copyOf(integer, 2, Integer[].class);
copyOf(U[] original, int newLength, Class<? extends T[]> newType)
由U类型复制为T类型?
original - 要复制的数组
newLength - 要返回的副本的长度
newType - 要返回的副本的类型
意思是你要把U数组里面的各个元素转换成T类型的元素,然后返回一个T类型的数组
源代码如下
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
所以你应该这么写Arrays.copyOf(integer, 2, Integer[].class);
而正如2楼所说,Arrays.copyOf的最后一个参数是Class<? extends T[]> newType,所以必然出错
据我所知 int[] ii = (int[]) Array.newInstance(Integer.TYPE, 2) 是可以
int本身是简单类型,是不没有.class的
Integer是int的包装类,当然能找到对应类,在两者之间Java提供了自动拆装箱机制,可以无缝互换(Integer不为null)
所以(int[])Integer[]是没问题的,但int[]没有class