我正在将一个应用程序转换为使用Java 1.5,并发现了以下方法:
/**
* Compare two Comparables, treat nulls as -infinity.
* @param o1
* @param o2
* @return -1 if o1<o2, 0 if o1==o2, 1 if o1>o2
*/
protected static int nullCompare(Comparable o1, Comparable o2) {
if (o1 == null) {
if (o2 == null) {
return 0;
} else {
return -1;
}
} else if (o2 == null) {
return 1;
} else {
return o1.compareTo(o2);
}
}
理想情况下,我希望该方法接受两个相同类型的可比较对象,是否可以转换并如何操作?我认为以下代码可以解决问题:
protected static <T extends Comparable> int nullCompare(T o1, T o2) {
但它未能消除IntelliJ上的警告:“作为原始类型'java.lang.Comparable'的成员,对'compareTo(T)'的未检查调用” ,该警告出现在以下行中:
return o1.compareTo(o2);
T extends Comparable<T>
是正确的。如果在排序时一个Foo
对象可以与一个Bar
对象进行比较,那是没有帮助的。 - wchargin