问题是这样的,在书上说,不能使用泛型类型创建实例,如表达式newE[]或newE[10]就是错误的,所以一般(E[])newObject[capacity]这样解决,但我发现这样不能总是成功的,有些程序会出现...
问题是这样的,在书上说,不能使用泛型类型创建实例,如表达式new E[]或new E[10]就是错误的,所以一般(E[])new Object[capacity]这样解决,
但我发现这样不能总是成功的,有些程序会出现java.lang.ClassCastException异常,
这是我写的程序:
public static > 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+" ");
展开