通用方法不编译

时间:2013-11-06 20:04:18

标签: java generics

我写了一个泛型方法来对Type 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);
    }
}

1 个答案:

答案 0 :(得分:1)

您已使用另一个 sort声明将<T>方法设为通用,但它不是Comparable。您的sort方法为static,因此无法使用该类的<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