Что такое принципы PECS

«Что такое принципы PECS» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.