Старый вопрос, но ...
Как ответил jjnguy, вам нужно использовать:
public static <T extends Comparable<? super T>> T[] sort(T[] a) {
...
}
Рассмотрим следующий пример:
public class A implements Comparable<A> {}
public class B extends A {}
Класс B
неявно реализует Comparable<A>
, а не Comparable<B>
, поэтому ваш метод сортировки не может использоваться для массива B
, если используется Comparable<T>
вместо Comparable<? super T>
. Если быть более точным:
public static <T extends Comparable<T>> T[] brokenSort(T[] a) {
...
}
будет работать нормально в следующем случае:
A[] data = new A[3];
...
data = brokenSort(A);
, потому что в этом случае параметр типа T
будет связан с A
. Далее будет производить ошибку компиляции:
B[] data = new B[3];
...
data = brokenSort(B);
потому что T
не может быть привязан к B
, поскольку B
не реализует Comparable<B>
.
Ваше название довольно ... общее. Пожалуйста, уточните свой вопрос. –