Float является подклассом Number.Мы могли бы объявить это так:
class Float extends Number implements Comparable<Float>
Но на самом деле наш класс Float намного шире.Класс float знает, как сравнивать себя с целыми числами, Bignums, Doubles и т. Д. И т. Д. Фактически, наш класс float знает, как сравнивать себя с * any (числом.
class Float extends Number implements Comparable<Number>
class Integer extends Number implements Comparable<Number>
Фактически: любой класс чисел должен сделать это, поэтому реальное объявление sare
class Number implements Comparable<Number>
class Integer extends Number
class Float extends Number
Теперь интерфейс Comparable хорош с этим. Если бы он не был подстановочным знаком, то Floats и Integer не были быможет быть сопоставимым.
Но поскольку это так, вы можете пойти:
Comparable<Number> array[] = new Comparable<Number>[10];
array[0] = Float.getValue(10);
array[1] = Integer.getValue(11);
sort(array, 0, 1);
Вы не можете сделать это без>? super T>.