java - 在泛型类中排序

标签 java generics

我正在创建一个泛型类,它有一个方法,该方法应该对数组集合进行排序,该数组集合可能是一本书,也可能是一张 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;
            }                   
        }
    }
}

这给了我一个错误,即对象不可比较。如果我尝试转换为 T 类型,则会收到以下错误:T 未为 CompareTo 定义。如果我尝试这样的事情:

<T extends Comparable>

我可以编译,但我收到运行时错误,即使我在使用此类的两种类型中定义了 Comparable。

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

感谢您的帮助。

最佳答案

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

<T extends Comparable<T>>

或者更晦涩的

<T extends Comparable<? super T>>

参见

public static <T extends Comparable<? super T>> void sort(List<T> list)

这个故事的寓意:如果您不打算使用一个完全符合您想要的功能的内置函数,您至少应该首先了解它,因为它可能会给您一些提示。 ;)

关于java - 在泛型类中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235039/

相关文章:

java - Java中目录的文件描述符

java - Java泛型方法返回类型中的上界和下界通配符

generics - 返回相同的集合类型,不同的参数化

json - serde_json::from_str 错误,其中字符串来自文件

c# - 无法将通用接口(interface)的具体实例添加到通用集合

java - FileZilla 不会对来 self 的 java FTP 服务器的命令使用react

java - 更改 JTable 的背景颜色

java - Android ListAdapter 启动@top

c++ - C++中不相关T的容器

java - Android - 将字符串日期转换为前时间日期格式