在 Kotlin 中,out 和 in 是用来标记泛型类型参数的变型关键字,用于指定类型参数的可变性(variance)。这些关键字通常用于泛型类、接口和函数中,以指定泛型类型参数的子类型关系。
out 关键字:用于标记泛型类型参数,表示类型参数是协变的(covariant),即只能作为输出位置(返回值的类型、集合的生产者)。在泛型类或接口中,如果泛型类型参数只在输出位置(返回值)使用,那么可以使用 out 来标记它。
in 关键字:用于标记泛型类型参数,表示类型参数是逆变的(contravariant),即只能作为输入位置(参数的类型、集合的消费者)。在泛型类或接口中,如果泛型类型参数只在输入位置(参数)使用,那么可以使用 in 来标记它。
下面是一个简单的示例,演示了如何在 Kotlin 中使用 out 和 in:
interface Producer<out T> {
fun produce(): T
}
interface Consumer<in T> {
fun consume(item: T)
}
open class Fruit {
open fun getColor(): String {
return "Unknown"
}
}
class Apple : Fruit() {
override fun getColor(): String {
return "red"
}
}
fun main() {
val appleProducer: Producer<Apple> = object : Producer<Apple> {
override fun produce(): Apple {
return Apple()
}
}
val fruitConsumer: Consumer<Fruit> = object : Consumer<Fruit> {
override fun consume(item: Fruit) {
println("consume ${item.getColor()} apple")
}
}
val apple: Apple = appleProducer.produce()
fruitConsumer.consume(apple)
}
评论