在泛型中,为什么object数组能够转换成实际类型数组

 我来答
追忆小土豆
2017-09-01 · TA获得超过7739个赞
知道大有可为答主
回答量:4890
采纳率:0%
帮助的人:1485万
展开全部
先说说ArrayList的toArray

ArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法:
1.list.toArray();
2.list.toArray(T[] a);
对于第一个重载方法,是将list直接转为Object[] 数组;
第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与list内容相同的类型。

不明真像的同学喜欢用第一个,是这样写:

ArrayList<String> list=newArrayList<String>();
for(inti = 0; i <10; i++) {
list.add(""+i);
}

String[] array= (String[]) list.toArray();

结果一运行,报错:
Exception in thread "main" Java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

原因一看就知道了,不能将Object[] 转化为String[].转化的话只能是取出每一个元素再转化,像这样:
Object[] arr = list.toArray();
for(inti = 0; i < arr.length; i++) {
String e = (String) arr[i];
System.out.println(e);
}

所以第一个重构方法就不是那么好使了。
实际上,将list世界转化为array的时候,第二种重构方法更方便,用法如下:

String[] array =newString[list.size()];
list.toArray(array);

List接口的toArray方法可以把一个集合转化为数组,但是使用不方便,toArray()方法 返回的是一个Object数组,所以需要自行转变;toArray(T[] a)虽然返回的是T类型的数组, 但是还需要传入一个T类型的数组,这也挺麻烦的,我们期望输入的是一个泛型化的List, 这样就能转化为泛型数组了,来看看能不能实现,代码如下:
[java] view plain copy
public static<T> T[] toArray(List<T> list){
T[] t=(T[]) new Object[list.size()];
for(int i=0;i<list.size();i++){
t[i]=list.get(i);
}
return t;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式