kotlin中的in 和 out

小张哥
2024-04-07 / 0 评论 / 64 阅读 / 正在检测是否收录...

在 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)
}
0

评论

博主关闭了所有页面的评论