日期:2014-05-20  浏览次数:20709 次

Collection中toArray方法类型转换的问题
Collection coll = new Array();
coll.add("item1");
coll.add("item2");
coll.add("item3");

String[] strArray = coll.toArray(new String[]{});  
Java code

 public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
    System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }


上面是jdk中ArrayList的toArray()方法

问题1:toArray既然是一个泛型方法,我传递了指定的类型,为什么这里还会出现类型转换的编译错误呢??错误提示是说:不能将Object[]转换成String[]类型

将上述代码改造成如下形式:
Collection<Object> coll = new Array<Object>();
coll.add("item1");
coll.add("item2");
coll.add("item3");

String[] strArray = coll.toArray(new String[]{});
问题2:为什么在创建对象的时候指定类型为Object就不会提示编译错误了呢?泛型类型如果默认不加类型限制,默认就是Object类型,为什么问题1那就通不过编译呢?  

求解释???

------解决方案--------------------
Collection coll = new ArrayList();这里应该要确定泛型的类型,注意默认是Object,如果你要使用String类型的话应该是Collection<String> coll = new ArrayList<String>();