Java 泛型类中的排序

Java 泛型类中的排序,java,generics,Java,Generics,我正在创建一个泛型类,该类有一个方法,该方法可以对数组集合进行排序,数组集合可以是一本书,也可以是一张CD。我在两个类型类中实现了Comparable,并尝试在GenericCollection类中对数组进行排序 我的方法现在是这样的: public void sort(){ for (int i = 0; i < collection.length; i++) { for (int j = 0; j < collection.length; j++) {

我正在创建一个泛型类,该类有一个方法,该方法可以对数组集合进行排序,数组集合可以是一本书,也可以是一张CD。我在两个类型类中实现了Comparable,并尝试在GenericCollection类中对数组进行排序

我的方法现在是这样的:

public void sort(){
    for (int i = 0; i < collection.length; i++) {
        for (int j = 0; j < collection.length; j++) {
            if (((T)collection[i]).compareTo((T)collection[j]) > 0){
                T t = (T)collection[i];
                collection[i] = collection[j];
                collection[j] = t;
            }                   
        }
    }
}
public void sort(){
for(int i=0;i0){
T=(T)集合[i];
集合[i]=集合[j];
集合[j]=t;
}                   
}
}
}
这给了我一个错误,即对象是不可比较的。如果我尝试强制转换为类型T,那么我会得到一个错误,即T对于CompareTo是未定义的。如果我尝试以下方法:

<T extends Comparable>

我可以编译,但我得到一个运行时错误,即使我在使用这个类的两种类型中都定义了可比较的

如何使泛型类型能够在自己的类中运行compareTo方法


感谢您的帮助。

如果您需要实现自己的排序算法,请尝试将泛型集合类的类型参数声明为

 <T extends Comparable<T>>

这意味着,您的类将声明如下:

 class GenericCollection<T extends Comparable<T>> {  ... }
class GenericCollection{…}
当然,您的book或CD类应该实现这种类型:

 class Book implements Comparable<Book> { ... }

 class CD implements Comparable<CD> { ... }
类书实现了可比较的{…}
类CD实现可比较的{…}

如果您使用参数
,则您使用的是原始类型,这些类型仅用于与旧(预泛型)代码兼容,不应在新代码中使用。

您应该使用内置排序,但要回答您需要的问题

<T extends Comparable<T>>

还是更晦涩

<T extends Comparable<? super T>>

收集的类型是什么?运行时错误是什么?@Justin。它是一个类型T的泛型集合。。。换句话说,它可以是一本书或一张CD(客户机类)。我在使用任何一种类型时都会出错。这是家庭作业吗?如果没有,是否有原因不使用
Arrays.sort()
Collections.sort()
@Daniel。线程“main”java.lang中出现异常。错误:未解决的编译问题:类型Object的方法compareTo(Object)未定义这是该方法的顶部,还是在调用构造函数时使用?谢谢帮助,这解决了问题,但对我来说有效的是将其放在类规范中,而不是方法中。
public static <T extends Comparable<? super T>> void sort(List<T> list)