读书人

Collection.toArray()怎么返回?extend

发布时间: 2012-09-09 09:27:54 作者: rapoo

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[])貌似没意义吧

读书人网 >J2SE开发

热点推荐