【问题标题】:Downcast interface to Integer向下转换为整数的接口
【发布时间】: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 数组。而且你也不应该使用原始类型。

标签: java downcast


【解决方案1】:

你不需要演员表。如果您知道它是这种类型(Integer),那么您首先会将其设为 Integer。

public static void insertionSort(Comparable[] a) {
    for (int i = 1; i < a.length; i++)
        for (int j = i - 1; j >= 0; j--)
            if (a[i].compareTo(a[j]) > 0)
                swap(a, i, j);
            else
                break;      
}

public static void swap(Comparable[] myArr, int a, int b) {
    Comparable temp = myArr[a];
    myArr[a] = myArr[b];
    myArr[b] = temp;        
}

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 2021-11-08
    • 1970-01-01
    • 2014-12-31
    • 2015-03-09
    • 2014-07-09
    • 1970-01-01
    • 2016-02-05
    • 2020-04-17
    相关资源
    最近更新 更多