Выбор ответа Senior Дженерики и стирание обновлено

Граница T extends Comparable<? super T>

Вопрос

Зачем в Collections.sort граница <T extends Comparable<? super T>>, а не просто <T extends Comparable<T>>?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Чтобы сортировать подтипы, у которых compareTo объявлен в предке. Пример: java.sql.Timestamp сравним как java.util.Date.

Варианты ответа

  1. Чтобы можно было сортировать списки, в которых встречается null
  2. Это требование для массивов примитивов, которые сортирует тот же метод
  3. Чтобы сортировать подтипы, у которых compareTo объявлен в предкеправильный ответ
  4. Чтобы сортировка была стабильной и не переставляла равные элементы

Разбор

Пример: 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 ошибок.