我正在制作一个使用T作为主要参数的泛型类。我需要对一些Ts进行排序,但要做到这一点,我需要实现一个通用的compareTo。我一直在寻找如何做到这一点。我知道如何实现像
这样的东西 public class Foo implements Comparable {
private int age;
public Foo (int age) {
this.age = age;
}
public int compareTo(Foo a) {
if (age < a.age) {
return -1;
}
if (age == a.age) {
return 0;
}
if (age > a.age) {
return 1;
} else {
return 0;
}
}
}
但是当我试图比较两个通用对象时我迷失了(例如,如果T是Integer,它会比较整数,如果T是String,它会比较String)。基本上,这个:
T.compareTo(T)
我知道这可能是一个我忽略的简单解决方案,但我不明白,因为没有我可以比较的变量。
答案 0 :(得分:1)
将Comparable
的通用形式与泛型类型参数一起使用,而不是没有Comparable
的原始形式。将Foo
个对象与其他Foo
个对象进行比较是有意义的。我不会使用泛型类型参数;我只会在Foo
上提供Comparable
作为类型参数。
尝试
public class Foo implements Comparable<Foo> {
然后您的compareTo
方法应该有效。
答案 1 :(得分:1)
如果您希望您的班级能够对任意类型的T
进行排序,您有两种选择,如果您愿意,可以同时进行这两种选择。
public class Sorter {
public static < T extends Comparable< ? super T > >
void sort( T[] atUnsorted ) {
// here you know that the elements of atUnsorted
// can be compared with each other using their
// compareTo methods
...
}
public static < T > void sort(
T[] atUnsorted, Comparator< ? super T > cmpT
) {
// here you can use cmpT.compare to compare
// any two elements in atUnsorted
...
}
}
如果您希望为每种类型T
设置专用的Sorter实例,则可以将type参数设置为类级别泛型参数,而不是使用静态方法。