Java 泛型方法未编译

Java 泛型方法未编译,java,generics,Java,Generics,我编写了一个通用方法来对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;

我编写了一个通用方法来对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);
    }
}
接口{
布尔lte(T);
}
类排序{
静态无效排序(T[]s){

对于(int i=0;i您已使用另一个
声明将
排序方法设置为泛型,但它不是
可比的
。您的
排序方法是
静态的
,因此它不能使用类的
。事实上,该类的
没有使用。请尝试以下操作:

// Not generic here anymore
class Sort {
   // Bound goes here
   static <T extends Comparable<T>> void sort(T[] s) {
//这里不再通用
类排序{
//邦德在这里
静态无效排序(T[]s){
此外,
String
不会扩展您的
Comparable
接口,因此这不会起作用(
String
甚至没有
lte
方法)。您需要传入一些实现
Comparable
的对象


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

的东西,您确定您的类正在扩展您自己的
Comparable
,而不是
java.lang.Comparable
java.lang.String
没有
lte()
method。是的,我被告知要编写一个对T类型的对象进行排序的方法,其中T作为泛型类型名引入到排序头中,T实现了Compariable。更改应限于修改排序头和排序体。它应该适用于我给出的主要方法。我正在修改去年在大学里做的一个练习,即问题是:以下程序按升序打印字符串序列。请注意,排序仅对字符串数组进行排序。请重写该程序,使其对类型为T的对象进行排序,其中T作为泛型类型名引入排序头中,T实现可比较。更改应限于修改排序头和排序体。“在这种情况下,我认为您不想编写自己的可比接口。我认为他们指的是java.lang.Comparable。(字符串确实实现了java.lang.Comparable。@DannyWalsh那么你不应该创建和使用你自己的
Comparable
接口。使用现有的内置
Comparable
接口,使用它的
compareTo
方法,而不是创建你自己的
lte
方法。这正是我所困惑的问题中包含的le接口是讲师给我们的。它还用于其他一些问题。@Mattforsyth他必须使用该接口,因为“原始”可比接口不包括名为
lte
的方法。也就是说,他当然可以使用
s[I]。compareTo(s[j])>0
,而不是
s[I]。lte(s[j])