Принцип PECS (Producer Extends Consumer Super) — это мнемоническое правило для определения, когда использовать ключевые слова extends
и super
при работе с wildcard-типами в Java дженериках.
Producer (Продюсер): Когда вы используете дженерик-параметр для получения данных (извлекаете элементы из коллекции), используйте wildcard с extends
. Коллекция выступает как продюсер данных. Тип ? extends T
означает "любой тип, который является T
или его подклассом". Вы можете безопасно читать элементы как тип T
(или его надкласс), но не можете добавлять элементы в такую коллекцию (кроме null
).
Consumer (Консьюмер): Когда вы используете дженерик-параметр для добавления данных (кладете элементы в коллекцию), используйте wildcard с super
. Коллекция выступает как консьюмер данных. Тип ? super T
означает "любой тип, который является T
или его суперклассом". Вы можете безопасно добавлять элементы типа T
(или его подклассов) в такую
Принцип PECS (Producer Extends Consumer Super) — это мнемоническое правило для определения, когда использовать ключевые слова extends
и super
при работе с wildcard-типами в Java дженериках.
Producer (Продюсер): Когда вы используете дженерик-параметр для получения данных (извлекаете элементы из коллекции), используйте wildcard с extends
. Коллекция выступает как продюсер данных. Тип ? extends T
означает "любой тип, который является T
или его подклассом". Вы можете безопасно читать элементы как тип T
(или его надкласс), но не можете добавлять элементы в такую коллекцию (кроме null
).
Consumer (Консьюмер): Когда вы используете дженерик-параметр для добавления данных (кладете элементы в коллекцию), используйте wildcard с super
. Коллекция выступает как консьюмер данных. Тип ? super T
означает "любой тип, который является T
или его суперклассом". Вы можете безопасно добавлять элементы типа T
(или его подклассов) в такую
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.