Ответ
PECS (Producer Extends, Consumer Super) — принцип работы с дженериками в Java/Kotlin, помогающий избежать ошибок типизации.
- Producer Extends (
? extends T) — используется, когда коллекция только производит элементы (например, для чтения). Позволяет читать элементы какT, но не добавлять.
fun printNumbers(list: List<out Number>) {
list.forEach { println(it) } // Можно читать
// list.add(1) — ошибка компиляции
}
- Consumer Super (
? super T) — применяется, когда коллекция потребляет элементы (например, для записи). Можно добавлятьTи его подтипы, но читать только какAny?.
fun addNumbers(list: MutableList<in Number>) {
list.add(42) // Можно писать
val item = list[0] // Тип — Any?
}
PECS улучшает безопасность типов и гибкость API.