#java #generic-programming #generic-list
#java #универсальное программирование #общий список
Вопрос:
Я хочу реализовать простую функцию сортировки, которая сортирует список и возвращает отсортированный список (очень просто!). Итак, я написал это
public static <T extends List<? extends Comparable>> T sort(T objects)
{
Collections.sort(objects);
return objects;
}
Проблема в том, что когда я пытаюсь отсортировать простой список, он выдает мне эту ошибку
Ошибка: (19, 20) ошибка: не найден подходящий метод для коллекций методов сортировки (T # 1). сортировка (Список) неприменима (не удается определить переменные типа T # 2 (несоответствие аргументов; T # 1 не может быть преобразован в список)) метод Collections.sort(список, компаратор) неприменим (не может определить переменные типа T # 3 (фактические и формальные списки аргументов отличаются по длине)), где T # 1, T # 2, T # 3 являются переменными типа: T # 1 расширяет список, объявленный в методесортировка (T # 1) T # 2 расширяет сопоставимость, объявленную в методе sort(List) T # 3 расширяет объект, объявленный в методе sort(List,Comparator), где CAP # 1 является новой переменной типа: CAP # 1 расширяет сопоставимость из захвата? расширяет сопоставимые
Так в чем проблема ?!
Заранее спасибо :)))
Комментарии:
1. Одна из проблем заключается в том, что if
T extends P
,List<T>
не расширяетсяList<P>
, поэтому каким-то образом ваш generic неверен, поскольку вы ожидаетеT extends List<..>
.2. И какова цель этого метода в первую очередь? Почему бы не вызвать Collections.sort() на месте ?!
Ответ №1:
Как указал @Bejan George, общим типом в этом случае должен быть не список, а сопоставимые элементы, содержащиеся в списке.
Правильная реализация будет:
public static <T extends Comparable> List<T> sort(List<T> objects) {
Collections.sort(objects);
return objects;
}