2 つの s を使用する一般的な max 関数を作成しようとしています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)
これが言っていると思うのは、?
inComparable<?>
がパラメーター a の 1 つのタイプとパラメーター b の別のタイプとして解釈される可能性があるため、それらを比較できないということです。
この穴から抜け出すにはどうすればいいですか?