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