你要知道各个参数的含义
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); 

解决方案 »

  1.   

    问题在于int[]是整数数组,但不是对象,所以int[].class是没法找到对应的类的
    而正如2楼所说,Arrays.copyOf的最后一个参数是Class<? extends T[]> newType,所以必然出错
      

  2.   

    int[]没法找到对应的类,难道Integer[]就能找到对应的类了?
    据我所知 int[] ii = (int[]) Array.newInstance(Integer.TYPE, 2) 是可以
      

  3.   


    int本身是简单类型,是不没有.class的
    Integer是int的包装类,当然能找到对应类,在两者之间Java提供了自动拆装箱机制,可以无缝互换(Integer不为null)
    所以(int[])Integer[]是没问题的,但int[]没有class
      

  4.   

    Class<? extends T[]> newType  这个参数  是 用来接收  T[] 子类的class  前面 你的T  已经指定 是Integer,所以 你后面 只能传入Integer[] 的子类  由于 Integer是final的  所以你在 后面只能传入  Integer[],class作为参数