Sobes.tech
Junior — Middle

Vysvetlite koncept kovariancie v generikách v Kotlin a jeho použitie

sobes.tech AI

Odpoveď od AI

Kovariancia v Kotlin je vlastnosť generík, ktorá umožňuje používať špecifickejší typ namiesto základného pri čítaní dát. Je označená kľúčovým slovom out v deklarácii typu, napríklad interface Producer<out T>. To znamená, že Producer<Cat> môže byť použitý tam, kde sa očakáva Producer<Animal>, ak Cat dedí od Animal.

Použitie kovariancie je užitočné, keď sa generik používa iba na výstup (čítanie) dát, nie na zápis. To zabezpečuje bezpečnosť typov a flexibilitu API.

Príklad:

open class Animal
class Cat : Animal()

interface Producer<out T> {
    fun produce(): T
}

fun feedAnimals(animals: Producer<Animal>) {
    val animal = animals.produce()
    // kŕmime zviera
}

val catsProducer: Producer<Cat> = object : Producer<Cat> {
    override fun produce() = Cat()
}

feedAnimals(catsProducer) // Funguje vďaka kovariancii