Назад к вопросам
Junior — Middle
80
Объясните концепцию ковариантности в дженериках на языке Kotlin и её применение
Компании, где спрашивали
IRLIX
Ответ от нейросети
sobes.tech AI
Ковариантность в Kotlin — это свойство дженериков, позволяющее использовать более конкретный тип вместо базового при чтении данных. Обозначается ключевым словом out в объявлении типа, например, interface Producer<out T>. Это значит, что Producer<Cat> можно использовать там, где ожидается Producer<Animal>, если Cat наследуется от Animal.
Применение ковариантности полезно, когда дженерик используется только для вывода (чтения) данных, но не для записи. Это обеспечивает безопасность типов и гибкость API.
Пример:
open class Animal
class Cat : Animal()
interface Producer<out T> {
fun produce(): T
}
fun feedAnimals(animals: Producer<Animal>) {
val animal = animals.produce()
// кормим животное
}
val catsProducer: Producer<Cat> = object : Producer<Cat> {
override fun produce() = Cat()
}
feedAnimals(catsProducer) // Работает благодаря ковариантности