Попробуйте <T extends Number & Comparable<T>>
.
например. Integer
реализует Comparable<Integer>
, что несовместимо с Comparable<? super Number>
(целое число не является суперклассом числа). Comparable<? extends Number>
также не будет работать, потому что Java будет думать, что ?
может быть любым подклассом Number
, а передача T
в compareTo
не будет компилироваться, поскольку она ожидает параметр ?
, а не T
.
Редактировать: , как сказал newacct, <T extends Number & Comparable<? super T>>
тоже будет работать (и будет немного более общим), поскольку тогда compareTo
примет любое ?
, из которых T
является подклассом, и как обычно, экземпляр подкласса может быть задан в качестве параметра, где ожидается суперкласс.