Назад к вопросам
СБЕР
Senior
5
Расскажите про особенности ограничений верхних и нижних границ в wildcards (PECS принцип, ковариантность/контравариантность)
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Java wildcard-ограничения позволяют управлять типами в обобщениях (generics) с помощью верхних (extends) и нижних (super) границ, что связано с принципом PECS (Producer Extends, Consumer Super).
? extends T(ковариантность) — используется, когда объект выступает как источник (producer) данных типа T или его подтипов. Позволяет читать данные, но не добавлять (кроме null).? super T(контравариантность) — используется, когда объект выступает как потребитель (consumer) данных типа T или его супертипов. Позволяет добавлять объекты типа T, но чтение возвращает объекты типа Object или супертипа.
Пример:
List<? extends Number> numbers = new ArrayList<Integer>();
Number num = numbers.get(0); // Можно читать
// numbers.add(10); // Ошибка компиляции
List<? super Integer> integers = new ArrayList<Number>();
integers.add(10); // Можно добавлять
Object obj = integers.get(0); // Чтение возвращает Object
Таким образом, верхняя граница ограничивает типы для чтения (ковариантность), а нижняя — для записи (контравариантность). Это помогает избежать ошибок типов и повысить гибкость кода.