当前位置: 代码迷 >> J2SE >> Collection中toArray方法类型转换的有关问题
  详细解决方案

Collection中toArray方法类型转换的有关问题

热度:63   发布时间:2016-04-24 00:47:14.0
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>();
  相关解决方案