Данный прием используется для обеспечения гибкости при проектировании api с использовании generic‘ов.
Для дальнейшего понимания, стоит напомнить, что такое wildcard в java.

Wildcard — это ограничение для типов, которые мы определяем с помощью generic’ов. Оно может быть как сверху, так и снизу.
Ограничение снизу, определяется следующим образом Ему удовлетворяют все классы, у которых потомком является класс T.

Обозначает ограничение сверху, под него подпадают все классы наследованые от класса T.

Итак, вернемся теперь к PECS.
Он гласит: producer — extends, consumer — super.


Если метод является producer, то используем ограничение сверху, если consumer, то снизу.
Осталось определить, когда метод является consumer, а когда producer.

Лучше показать на примерах.

/**
 * добавление чисел от 0 до count
 * @param collection коллекция в которую добавляем элементы
 * @param count количество элементов
 */
void addElements(Collection<? super Integer>collection, int count){
    for(int i=0;i<count;i++){
        collection.add(i);
    }
 }

Этот метод является consumer. Аргументом данного метода, является коллекция. Тип элементов коллекции нам не известен, но мы знаем, что тип элементов, которые мы добавляем является наследником от данного. Этим мы обеспечиваем typesafe.

Теперь посмотрим на producer.

/**
 * находим порядковый индекс элемента
 *
 * @param array   массив
 * @param element элемент индекс которого нужно найти
 * @param <t>     тип элемента
 * @return индекс элемента в массиве, иначе, если элемент не содержится -1
 */
<T> int getIndex(List<? extends T> array, T element) {
    int index = -1;
    int currentIndex = 0;
    for (T e : array) {
        if (e.equals(element)) {
            index = currentIndex;
            break;
        }
        currentIndex++;
    }

    return index;
}

Нам не важно, какой именно тип у элементов коллекции, главное, чтобы он был производный от типа элемента, с которым происходит сравнение.

Итак, можно подытожить и ввести неформальное правило: если у нас происходит чтение из аргумента, то метод producer, если запись, то consumer.