5. Расскажите про принцип PECS
UNKNOWNThe Get and Put Principle или PECS (Producer Extends Consumer Super) Get and Put Principe
Из одного типа переменных можно только читать, в другой — только вписывать (исключением является возможность записать null для extends и прочитать Object для super).
- <?> Запись вида Collection<?> равносильна Collection<? extends Object> , а значит — коллекция может содержать объекты любого класса, так как все классы в Java наследуются от Object – поэтому подстановка называется неограниченной.
- Ковариация - Если мы объявили wildcard с extends, то это producer. Он только «продюсирует», предоставляет элемент из контейнера, а сам ничего не принимает.
- Контрвариация - Если же мы объявили wildcard с super — то это consumer. Он только принимает, а предоставить ничего не может.
Если метод имеет аргументы с параметризованным типом (например, Collection или Predicate), то в случае, если аргумент - производитель (producer), нужно использовать ? extends T, а если аргумент - потребитель (consumer), нужно использовать ? super T.
Eсли метод читает данные из аргумента, то этот аргумент - производитель.
Метод передаёт данные в аргумент, то аргумент является потребителем.
Важно заметить, что определяя производителя или потребителя, мы рассматриваем только данные типа T.
Ковариантность — это сохранение иерархии наследования исходных типов в производных типах в том же порядке
Множество<Животные> = Множество<Кошки>
Контравариантность — это обращение иерархии исходных типов на противоположную в производных типах
Множество<Кошки> = Множество<Животные>
Предыдущий вопрос: 4. Что такое вайлдкарды (Маски)?
Следующий вопрос: 1. Что такое коллекция?
Все вопросы по теме: список
Все темы: список
Вопросы/замечания/предложения/нашли ошибку:напишите мне