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>();