PECS (Producer Extends Consumer Super) - это принцип, который используется при работе с generics в Java. Он определяет, какие типы wildcards ("?" символ) следует использовать для обобщенных типов данных, когда мы работаем с производителями (producer) и потребителями (consumer).
Производители - это объекты, которые генерируют значения типа T. Например, если у нас есть список фруктов, то производителем будет метод, который возвращает элементы списка.
Потребители - это объекты, которые используют значения типа T. Например, если у нас есть список фруктов, то потребителем может быть метод, который выводит элементы списка на экран или сохраняет их в файл.
Согласно принципу PECS, если мы хотим использовать обобщенный тип данных, как производитель, то следует использовать wildcard "extends", а если мы хотим использовать его в качестве потребителя, то следует использовать wildcard "super".
Пример использования wildcard "extends":
public void printList(List<? extends Fruit> list) {
for (Fruit fruit : list) {
System.out.println(fruit.getName());
}
}
В данном примере мы можем передавать список любых типов фруктов, которые наследуются от класса Fruit. Это позволяет нам использовать этот метод для работы со списками различных типов фруктов, например, Apple или Orange.
Пример использования wildcard "super":
public void addFruit(List<? super Fruit> list, Fruit fruit) {
list.add(fruit);
}
В данном примере мы можем передавать список любых типов, которые являются супертипами класса Fruit. Это позволяет нам добавлять элементы в список различных типов фруктов, например, Fruit или Object.
Таким образом, принцип PECS помогает нам правильно выбирать wildcard при работе с generics в Java, что позволяет нам создавать более универсальный и безопасный код.
Если вам понравилось, буду признателен за подписку.