我想写一个通用的最大功能,需要两个Comparable
s。如何在Java中实现泛型`max(Comparable a,Comparable b)`函数?
到目前为止,我有
public static <T extends Comparable<?>> T max(T a, T b) {
if (a == null) {
if (b == null) return a;
else return b;
}
if (b == null)
return a;
return a.compareTo(b) > 0 ? a : b;
}
这种失败
The method compareTo(capture#5-of ?) in the type Comparable<capture#5-of ?> is not applicable for the arguments (T)
来编译,我认为这是什么意思是说,在Comparable<?>
的?
可以被解释为一种类型的参数,另一个用于参数b,以便它们不能被比较。
我该如何挖掘出这个洞?
在'if(a == null)'块中,不需要嵌套if子句。将块减少到'return b;'产生相同的结果(当'b'为'null'时为'null',否则为'b')。 – benjamin
请参阅[org.apache.commons.lang3.ObjectUtils.compare](https://commons.apache.org/proper/commons-lang/javadocs/api-3.6/org/apache/commons/lang3/ObjectUtils.html#比较 - TT-) –