当前位置: 代码迷 >> J2SE >> Collection.toArray()怎么返回?extends T数组
  详细解决方案

Collection.toArray()怎么返回?extends T数组

热度:7698   发布时间:2013-02-25 00:00:00.0
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[])貌似没意义吧
  相关解决方案