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