【发布时间】:2017-02-26 09:55:11
【问题描述】:
public static void InsertionSort(Comparable[] a, int length){
for (int i = 1; i < length; i++){
for(int j = i; j > 0; j--){
if(a[j].compareTo(a[i]) > 0){
Integer b = (Integer)a;
swap(b, j, i);
}
else{
break;
}
}
}
}
public static void swap(Integer[] myArr,int a, int b){
int temp;
temp = myArr[a];
myArr[a] = myArr[b];
myArr[b] = temp;
}
为什么不能将接口向下转换为实现它的实例?我想将 a 向下转换为 Integer 类型,因为 a 是可比较的类型。然后使用采用 Integer 类型的 swap 方法,但这是非法的。
【问题讨论】:
-
Integer实现Comparable,反之亦然。例如stackoverflow.com/questions/7909081/… -
您的交换方法需要一个整数数组作为第一个参数。你正在传递一个整数。
a是一个数组,您正在尝试将其转换为整数。数组不可能是整数。阅读错误消息:它应该准确地告诉你。但最大的问题是,如果您的方法只能对 Integer 进行排序,并为任何其他 Comparable 抛出 ClassCastException,则它应该将 Integer 数组作为参数,而不是 Comparable 数组。而且你也不应该使用原始类型。