Что такое PECS и когда использовать extends/super?

В Java при работе с дженериками ключевые слова extends и super используются для ограничения типов и влияют на ковариантность и контравариантность.

Короткий ответ

Что ответить на собеседовании

В Java при работе с дженериками ключевые слова extends и super используются для ограничения типов и влияют на ковариантность и контравариантность.

Подробный разбор

Ответ с пояснениями

В Java при работе с дженериками ключевые слова extends и super используются для ограничения типов и влияют на ковариантность и контравариантность.

  • ? extends T — ограничение сверху (ковариантность). Позволяет использовать тип T или любой его подкласс. Это значит, что можно читать объекты типа T из коллекции, но нельзя безопасно добавлять объекты в такую коллекцию (кроме null).
  • ? super T — ограничение снизу (контравариантность). Позволяет использовать тип T или любой его суперкласс. Это значит, что можно добавлять объекты типа T в коллекцию, но при чтении можно получить только объекты типа Object или более общего типа.

Пример:

List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Можно читать как Number
// listExtends.add(10); // Ошибка компиляции

List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Можно добавлять Integer
Object obj = listSuper.get(0); // При чтении тип Object

Таким образом, extends используется, когда нужно читать данные из структуры, а super — когда нужно записывать данные.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее