Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Принцип PECS (Producer Extends Consumer Super)
PECS — это мнемоническое правило для использования wildcard-типов в generics. Оно помогает определить, когда использовать extends и super при работе с параметрами-обобщениями.
Основное правило
Producer Extends — когда вы только читаете данные из коллекции:
public void addAll(List<? extends Number> source) {
for (Number num : source) {
// Читаем данные
System.out.println(num);
}
}
Здесь ? extends Number означает, что список может содержать Number или его подклассы. Мы можем читать элементы, но не можем добавлять (кроме null).
Consumer Super — когда вы только пишете данные в коллекцию:
public void fillWithNumbers(List<? super Number> target) {
target.add(1);
target.add(2.5);
target.add(Long.MAX_VALUE);
}
Здесь ? super Number означает, что список может содержать Number или его суперклассы. Мы можем добавлять Number и его подклассы, но при чтении получим Object.
Практический пример
public class Collections {
// Producer — читаем из source
public static <T> void copy(List<? super T> dest, List<? extends T> source) {
for (T item : source) {
dest.add(item);
}
}
}
Вызовы:
List<Integer> integers = Arrays.asList(1, 2, 3);
List<Object> objects = new ArrayList<>();
Collections.copy(objects, integers); // OK
Когда использовать
? extends Tв методах с параметрами, из которых только читаете? super Tв методах с параметрами, в которые только пишете- Без wildcard когда нужны и чтение, и запись
Это правило обеспечивает гибкость и безопасность типов при работе с hierarchies классов и generic-коллекциями.