воскресенье, 4 октября 2015 г.

Коротко о PESC

Данный прием используется для обеспечения гибкости при проектировании api с использовании generic'ов. Для дальнейшего понимания, стоит напомнить, что такое wildcard в java.
Wildcard - это ограничение для типов, которые мы определяем с помощью generic'ов. Оно может быть как сверху, так и снизу.
Ограничение снизу, определяется следующим образом Ему удовлетворяют все классы, у которых потомком является класс T.
Обозначает ограничение сверху, под него подпадают все классы наследованые от класса T.
Итак, вернемся теперь к PECS. Он гласит: producer - extends, consumer - super.
Если метод является producer, то используем ограничение сверху, если consumer, то снизу. Осталось определить, когда метод является consumer, а когда producer.
Лучше показать на примерах.
Этот метод является consumer. Аргументом данного метода, является коллекция. Тип элементов коллекции нам не известен, но мы знаем, что тип элементов, которые мы добавляем является наследником от данного. Этим мы обеспечиваем typesafe.
Теперь посмотрим на producer.
Нам не важно, какой именно тип у элементов коллекции, главное, чтобы он был производный от типа элемента, с которым происходит сравнение.
Итак, можно подытожить и ввести неформальное правило: если у нас происходит чтение из аргумента, то метод producer, если запись, то consumer.