5. Расскажите про принцип PECS

5. Расскажите про принцип PECS

UNKNOWN

The Get and Put Principle или PECS (Producer Extends Consumer Super) Get and Put Principe

Из одного типа переменных можно только читать, в другой — только вписывать (исключением является возможность записать null для extends и прочитать Object для super).

  1. <?> Запись вида Collection<?> равносильна Collection<? extends Object> , а значит — коллекция может содержать объекты любого класса, так как все классы в Java наследуются от Object – поэтому подстановка называется неограниченной.
  2. Ковариация - Если мы объявили wildcard с extends, то это producer. Он только «продюсирует», предоставляет элемент из контейнера, а сам ничего не принимает.
  3. Контрвариация - Если же мы объявили wildcard с super — то это consumer. Он только принимает, а предоставить ничего не может.

Если метод имеет аргументы с параметризованным типом (например, Collection или Predicate), то в случае, если аргумент - производитель (producer), нужно использовать ? extends T, а если аргумент - потребитель (consumer), нужно использовать ? super T.

Eсли метод читает данные из аргумента, то этот аргумент - производитель.

Метод передаёт данные в аргумент, то аргумент является потребителем.

Важно заметить, что определяя производителя или потребителя, мы рассматриваем только данные типа T.

Ковариантность — это сохранение иерархии наследования исходных типов в производных типах в том же порядке

Множество<Животные> = Множество<Кошки>

Контравариантность — это обращение иерархии исходных типов на противоположную в производных типах

Множество<Кошки> = Множество<Животные>


Предыдущий вопрос: 4. Что такое вайлдкарды (Маски)?

Следующий вопрос: 1. Что такое коллекция?

Все вопросы по теме: список

Все темы: список

Вопросы/замечания/предложения/нашли ошибку:напишите мне

Report Page