我正在尝试编写一个通用的最大值函数,该函数接受两个Comparable
参数。
到目前为止,我的代码如下:
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<?>
中的 ?
可以被解释为参数 a 的一种类型,也可以被解释为参数 b 的另一种类型,因此它们无法进行比较。
那我该如何摆脱这个困境呢?
if(a==null)
块中,不需要嵌套if语句。将该块简化为return b;
可以得到相同的结果(当b
为null
时返回null
,否则返回b
)。 - benjamin