Sobes.tech
Junior — Middle

Explique o conceito de covariância em genéricos em Kotlin e sua aplicação

sobes.tech IA

Resposta da IA

A covariância em Kotlin é uma propriedade dos genéricos que permite usar um tipo mais específico em vez do tipo base ao ler dados. É indicada pela palavra-chave out na declaração do tipo, por exemplo, interface Producer<out T>. Isso significa que Producer<Cat> pode ser usado onde se espera Producer<Animal>, se Cat herda de Animal.

O uso de covariância é útil quando o genérico é usado apenas para saída (leitura) de dados, mas não para escrita. Isso garante segurança de tipos e flexibilidade na API.

Exemplo:

open class Animal
class Cat : Animal()

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

fun feedAnimals(animals: Producer<Animal>) {
    val animal = animals.produce()
    // alimenta o animal
}

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

feedAnimals(catsProducer) // Funciona graças à covariância