Во-первых, ArrayList
не обязательно должно быть Comparable
. Вещи внутри списка массивов должны быть Comparable
. Это подпись sort
:
public static <T extends Comparable<? super T>> void sort(List<T> list) {
T
ограничено, а не List
.
Однако использование необработанных типов меняет все.
Поскольку вы написали ArrayList
вместо ArrayList<String>
, вы используете необработанный тип ArrayList
. Это в основном стирает все параметры универсального типа и заставляет sort
не проверять какие-либо ограничения. Это как если бы подпись стала:
public static void sort(List list) {
Вот почему вы смогли это назвать. Если бы вы поместили не Comparable
вещи в список массивов, они бы потерпели крах во время выполнения:
ArrayList al= new ArrayList();
al.add(new Object());
al.add(new Object());
Collections.sort(al); // ClassCastException