Sobes.tech
Back to questions
Junior — Middle
59

Чем отличаются ключевые слова extends и super при использовании дженериков в Java?

Answer from AI

sobes.tech AI

В 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 — когда нужно записывать данные.