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

Collection.toArray()如何返回?extends T数组
class A{
 private List<A>list=new ArrayList<>();
 <T extends B>T[]toArray(Class<T>cla){
  return list.toArray((T[])new B[list.size()]);
 }
}
class B extends A{}
class C extends B{}
执行:C[]cs=new A().<C>toArray(C.class);//此行编译通过,运行时报类型转换错误
ps:toArray方法在eclipse中显示返回类型为C[],但运行时报错却是B[]不能转换为C[]



------解决方案--------------------
我看你的toArray(Class<T>cla)方法体内,
参数Class<T>cla根本就没有用到。
------解决方案--------------------
看代码有点晕,楼主好像把自己搞乱了。
如果是一个A类型的List想要转换成C类型的数组,这样就行了:

Java code
List<A> list = new ArrayList<A>();
list.add(new A());
list.add(new A());
        
C[] c = (C[])list.toArray(new C[list.size()]);

------解决方案--------------------
探讨

引用:

Java code

<T extends A> T[] toArray(Class<? extends A> cla) {
T[] ret = (T[])Array.newInstance(cla, list.size());
return (T[])list.toArray(ret);
}

补充一句,最后的(T[])貌似没意义吧