Получить доступ

Что можно делать со списком, объявленным как List<? extends Number>?

MiddleДженерики
Коротко

Читать как Number можно, добавлять нельзя ничего, кроме null: за ссылкой может быть List<Integer> или List<Double>, и компилятор не знает какой. Симметрично List<? super Integer> — добавлять Integer можно, читать — только как Object.

  • Удалять элементы и вызывать clear можно
  • Захват wildcard через вспомогательный обобщённый метод
  • Типичный параметр метода, который только читает

А ещё Возвращать wildcard-типы из методов — плохая практика, неудобно вызывающему

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

За ссылкой может стоять List<Integer> или List<Double>, и компилятор не знает, какой именно, поэтому запрещает добавление: положить Integer в список Double было бы ошибкой. Чтение при этом безопасно — что бы там ни лежало, это точно Number. Симметрично устроен List<? super Integer>: туда можно добавлять Integer и его наследников, но при чтении гарантирован только Object. Правило PECS ровно об этом: producer extends, consumer super. Единственное значение, которое разрешено добавлять в extends-список, — null, поскольку он совместим с любым ссылочным типом.

Что хотят услышать

  • Что разрешено и почему.
  • Симметрия с super.

Частые ошибки

  • Пытаться добавить элемент в коллекцию с ? extends.
  • Путать, какая из форм нужна источнику, а какая приёмнику данных.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Читать элементы как Number, но добавлять нельзя ничего, кроме null
  • ✗И читать, и добавлять любые наследники Number
  • ✗Только добавлять, но не читать
  • ✗Ни читать, ни добавлять — такой тип годится лишь для объявления полей

Что спросят дальше

  • Как выглядит сигнатура Collections.copy и почему в ней обе формы?
  • Что такое безграничный wildcard и когда он уместен?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем