我需要构建一个具有通用字段的类Course
(我无法添加另一个包含Comparator
的字段)。
我需要为类Course
创建一个Comparator
,以便可以使用它自己的CompareTo
方法来比较通用字段(如果String-compareTo
按字符串,如果按整数等..):
方法getGeneric()
返回通用字段。
new Comparator<Course<?>>( {
public int compare(Course<?> o1, Course<? extends Comparable<?>> o2) {
return (o1.getGeneric()).compareTo(o2.getGeneric());
}
});
最佳答案
您可能应该做的是拥有一个声明可比较的 T
的方法。 ,并返回 Comparator<Course<T>>
.
public static <T extends Comparable<T>> Comparator<Course<T>> comparator() {
return new Comparator<Course<T>>() {
@Override
public int compare(Course<T> o1, Course<T> o2) {
// I don't want to give away TOO much. :)
}
}
}
有一些方法可以做到这一点,而无需每次都创建新实例,但它们需要绕过类型系统,因此它们更高级。上述内容对于大多数用例来说应该没问题。
你也可以有 comparator
函数取 Comparator<T>
本身:
public static <T> Comparator<Course<T>> comparator(Comparator<T> innerComparator) {
...
}
这为您提供了额外的灵 active ,以及为没有自然比较的类型(即不实现 Comparable
)创建比较器的能力。例如,您可以创建 Comparator<Course<Course<Integer>>>
!
关于Java 泛型和扩展的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20618503/