Sobes.tech
Junior — Middle

Magyarázza el a kovariancia fogalmát a generikusokban Kotlinban és annak alkalmazását

sobes.tech MI

Válasz az MI-től

A kovariancia Kotlinban a generikusok egyik tulajdonsága, amely lehetővé teszi, hogy egy általános típus helyett egy specifikusabb típust használjunk adatolvasáskor. A out kulcsszóval jelöljük a típus deklarációjában, például interface Producer<out T>. Ez azt jelenti, hogy a Producer<Cat> használható ott, ahol Producer<Animal> várható, ha a Cat öröklődik az Animal-tól.

A kovariancia használata akkor hasznos, amikor a generikus csak az adatok kimenetére (olvasására) szolgál, nem pedig bemenetére. Ez biztosítja a típusbiztonságot és az API rugalmasságát.

Példa:

open class Animal
class Cat : Animal()

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

fun feedAnimals(animals: Producer<Animal>) {
    val animal = animals.produce()
    // etetjük az állatot
}

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

feedAnimals(catsProducer) // A kovariancia miatt működik