Sobes.tech
Senior

¿Qué es el acrónimo PECS (Producer Extends, Consumer Super) en Java generics?

sobes.tech AI

Respuesta de la IA

Акроним PECS (Producer Extends, Consumer Super) помогает правильно использовать ограниченные wildcard-типы в Java Generics для коллекций и других обобщённых типов.

  • Producer Extends: если объект выступает как источник (производитель) данных, используем ? extends T. Это позволяет читать элементы типа T или его подтипов, но запрещает добавлять элементы, чтобы не нарушить типовую безопасность.

  • Consumer Super: если объект выступает как потребитель данных, используем ? super T. Это позволяет добавлять элементы типа T или его подтипов, но чтение возвращает объекты типа Object или верхнего супертипа.

Пример:

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

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

Таким образом, PECS помогает определить, когда использовать extends для чтения (producer) и super для записи (consumer). Это повышает гибкость и безопасность кода с дженериками.