[英]Java Generics and exetends Comparable
我需要构建一个具有通用字段的Course
(我不能添加包含Comparator
另一个字段)。
我需要对Course
类进行Comparator
,以使其可以使用其自己的CompareTo
方法比较通用字段(如果按字符串比较String-compareTo
,如果按Integer等等。):
方法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) {
...
}
这为您提供了额外的灵活性,并且能够为没有自然比较(即未实现Comparable
)的类型创建比较器。 例如,您可以创建一个Comparator<Course<Course<Integer>>>
!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.