Выбор ответа Senior Дженерики и стирание обновлено
Граница T extends Comparable<? super T>
Вопрос
Зачем в Collections.sort граница <T extends Comparable<? super T>>, а не просто <T extends Comparable<T>>?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтобы сортировать подтипы, у которых compareTo объявлен в предке. Пример: java.sql.Timestamp сравним как java.util.Date.
Варианты ответа
- Чтобы можно было сортировать списки, в которых встречается null
- Это требование для массивов примитивов, которые сортирует тот же метод
- Чтобы сортировать подтипы, у которых
compareToобъявлен в предкеправильный ответ - Чтобы сортировка была стабильной и не переставляла равные элементы
Разбор
Пример: java.sql.Timestamp сравним как java.util.Date. Если класс B наследует A, а Comparable<A> реализован в A, то B это Comparable<A>, но не Comparable<B>. Граница Comparable<T> такой список бы не приняла, а Comparable<? super T> принимает: сравнивать B как A безопасно. Это тот же PECS: компаратор потребляет T. К null, примитивам и стабильности граница отношения не имеет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.