Junior — Middle
Spiega il concetto di covarianza nei generici in Kotlin e la sua applicazione
sobes.tech AI
Risposta dell'AI
La covarianza in Kotlin è una proprietà dei generici che permette di usare un tipo più specifico invece del tipo di base durante la lettura dei dati. È indicata dalla parola chiave out nella dichiarazione del tipo, ad esempio interface Producer<out T>. Ciò significa che Producer<Cat> può essere usato dove ci si aspetta Producer<Animal>, se Cat eredita da Animal.
L'uso della covarianza è utile quando il generico viene usato solo per l'output (lettura) dei dati, ma non per l'input. Questo garantisce la sicurezza dei tipi e la flessibilità dell'API.
Esempio:
open class Animal
class Cat : Animal()
interface Producer<out T> {
fun produce(): T
}
fun feedAnimals(animals: Producer<Animal>) {
val animal = animals.produce()
// alimenta l'animale
}
val catsProducer: Producer<Cat> = object : Producer<Cat> {
override fun produce() = Cat()
}
feedAnimals(catsProducer) // Funziona grazie alla covarianza