java‘形式泛型类型‘强制转换 50

问题是这样的,在书上说,不能使用泛型类型创建实例,如表达式newE[]或newE[10]就是错误的,所以一般(E[])newObject[capacity]这样解决,但我... 问题是这样的,在书上说,不能使用泛型类型创建实例,如表达式new E[]或new E[10]就是错误的,所以一般(E[])new Object[capacity]这样解决,
但我发现这样不能总是成功的,有些程序会出现java.lang.ClassCastException异常,
这是我写的程序:
public static <E extends Comparable<E>> void mergeSort(E[] list){
if(list.length>1){
//Merge sort the first half
E[] firstHalf=(E[])new Object[list.length/2]; //这里为什么会有错,ClassCastException,??
System.arraycopy(list,0,firstHalf,0,list.length/2);
mergeSort(firstHalf);

//Merge sort the second half
int secondHalfLength=list.length-list.length/2;
E[] secondHalf=(E[])new Object[secondHalfLength];
System.arraycopy(list,list.length/2,secondHalf,0,secondHalfLength);
mergeSort(secondHalf);

//Merge firstHalf with secondHalf
E[] temp=merge(firstHalf,secondHalf);
System.arraycopy(temp,0,list,0,temp.length);
}
}
E[] firstHalf=(E[])new Object[list.length/2];
E[] secondHalf=(E[])new Object[secondHalfLength];
这两句,有警告,但我认为不应该出错呀?下面测试排序算法的程序
String[] str={"zhu","bin","hua","wan","yu"}; //这里会出现ClassCastException异常,为什么??
MergeSort.mergeSort(str);
for(Object element:str)
System.out.print(element+" ");
展开
 我来答
daay1986
2009-09-15 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1472万
展开全部
E[] firstHalf = (E[]) new Object[list.length / 2];
你这里E编译器只能认定他是Comparable的类型,而你把一个Object直接转肯定出错。Object没实现Comparable接口。而且我建议你别这么用,这个时候你已经知道泛型是Comparable类型了为什么还要用泛型。
而且其实你这个方法系统本身就已经存在了:
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
这是Collections类源代码,你看下,很简洁,很值得参考的哦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
豆妈故事会
2009-09-15 · TA获得超过736个赞
知道小有建树答主
回答量:401
采纳率:0%
帮助的人:250万
展开全部
for(Object element:str)
这一句中的element不能被转换为String
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式