0

我编写了一个通用方法来对类型 T 的对象进行排序。我的编译器说“找不到符号:方法 lte(T)。

任何想法我的问题到底是什么?

interface Comparable<T>{
        boolean lte(T t);
}

class Sort<T extends Comparable<T>> {

    static <T> void sort(T[] s) {
        for (int i = 0; i<s.length; i++) {
            for (int j = i+1; j < s.length; j++) {
                if (s[i].lte(s[j])) {
                    T t;
                    t = s[i]; 
                    s[i] = s[j]; 
                    s[j] = t;
                }
            }
        }
    }

    public static void main(String[] args) {
        String[] names = {"Pete","Jill","May","Anne","Tim"};             
        sort(names);
        for (String s:names) 
            System.out.println(s);
    }
}
4

1 回答 1

1

您已经使用另一个sort声明使您的方法通用,但它不是. 你的方法是,所以它不能使用类的. 事实上,类的没有被使用。尝试这个: <T>Comparablesortstatic<T><T>

// Not generic here anymore
class Sort {
   // Bound goes here
   static <T extends Comparable<T>> void sort(T[] s) {

此外,String不扩展你的Comparable界面,所以这不起作用(String甚至没有lte方法,反正)。您将需要传入一些实现您的 Comparable.

充其量,将您的接口命名为与内置(和众所周知的)接口相同的名称是令人困惑的。我建议将您的Comparable界面重命名为Lteable.

于 2013-11-06T20:07:05.210 回答