尝试比较两个元素(Java)时出错!

时间:2017-11-01 03:31:10

标签: java generics comparable

class BubbleSort<T>  extends ArraySort<T>
{
    public void iSort(T[] inArray)  {
        int n = inArray.length;
        int k;
        for (int m = n; m >= 0; m--) {
            for (int i = 0; i < n - 1; i++) {
                k = i + 1;
                if (compare(inArray[i], inArray[k])) {
                    T temp;
                    temp = inArray[i];
                    inArray[i] = inArray[k];
                    inArray[k] = temp;
                }
            }
       }
       print(inArray);
    }
    public static <T extends Comparable<T>> boolean compare(T a, T b) {
        if (a.compareTo(b) > 0) {
            return true;
        } return false;
    }

我收到(T extends comparable < T >, T extends comparable < T >) in the type bubblesort< T > is not applicable for the arguments (T,T)错误!

快速解决方法告诉我将方法compare(T,T)< T >更改为compare(T,T),但这不会解决我的问题。当我输入元素的实际值时,它完全正常,例如,compare(3, 5)compare("hi", "hello")而不是compare(inArray[i], inArray[k])

如果有人能解释为什么会这样做并给我一个解决方案,我会非常感激。

1 个答案:

答案 0 :(得分:1)

您已经使用泛型类型T定义了您的类,因此为该方法声明一个单独的类没有意义:

class BubbleSort<T extends Comparable<T>> extends ArraySort<T> {
    public void iSort(T[] inArray) {
        int n = inArray.length;
        int k;
        for (int m = n; m >= 0; m--) {
            for (int i = 0; i < n - 1; i++) {
                k = i + 1;
                if (compare(inArray[i], inArray[k])) {
                    T temp;
                    temp = inArray[i];
                    inArray[i] = inArray[k];
                    inArray[k] = temp;
                }
            }
       }
       print(inArray);
    }

    public static boolean compare(T a, T b) {
        if (a.compareTo(b) > 0) {
            return true;
        }

        return false;
    }
}

无论如何,你应该在类声明中而不是在方法中表示T extends Comparable<T>