Generics
Out Variance
Read a subtype value through a producer of a base type.
Out Variance
VarianceOut.kt
open class Animal(val name: String)
class Dog(name: String) : Animal(name)
class Source<out T>(private val item: T) {
fun get(): T {
return item
}
}
fun readAnimal(source: Source<Animal>): String {
val animal = source.get()
return "animal:${animal.name}"
}
fun main() {
val name =
val dogSource: Source<Dog> = Source(Dog(name))
val label = readAnimal(dogSource)
println("name=$name")
println("label=$label")
}
open class Animal(val name: String)
class Dog(name: String) : Animal(name)
class Source<out T>(private val item: T) {
fun get(): T {
return item
}
}
fun readAnimal(source: Source<Animal>): String {
val animal = source.get()
return "animal:${animal.name}"
}
fun main() {
val name =
val dogSource: Source<Dog> = Source(Dog(name))
val label = readAnimal(dogSource)
println("name=$name")
println("label=$label")
}
open class Animal(val name: String)
class Dog(name: String) : Animal(name)
class Source<out T>(private val item: T) {
fun get(): T {
return item
}
}
fun readAnimal(source: Source<Animal>): String {
val animal = source.get()
return "animal:${animal.name}"
}
fun main() {
val name =
val dogSource: Source<Dog> = Source(Dog(name))
val label = readAnimal(dogSource)
println("name=$name")
println("label=$label")
}
variance
`out` marks a generic type parameter that is only produced by the class.