我正在转换应用程序以使用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 staticint nullCompare(T o1, T o2) {
但它未能在IntelliJ中删除警告"未经检查的'compareTo(T)'调用作为原始类型'java.lang.Comparable'"的成员:
return o1.compareTo(o2);
jodonnell.. 21
将其更改为:
protected static> int nullCompare(T o1, T o2) {
你需要它,因为Comparable本身就是一种通用类型.
将其更改为:
protected static> int nullCompare(T o1, T o2) {
你需要它,因为Comparable本身就是一种通用类型.
这是一个奇怪的案例:
static class A { ... } static class B extends A implements Comparable { public int compareTo(A o) { return ...; } }
幸运的是,上面的代码很少见,但nullCompare()不支持B的比较,除非声明Comparable可能适用于T 或其任何超类:
protected static> int nullCompare(T o1, T o2) {
即使大多数人永远不会从上述调整中受益,但在为导出的库设计API时它可能会派上用场.