17、Kotlin泛型与扩展功能全解析

Kotlin泛型与扩展功能全解析

1. 方差生产者/消费者限制

在Kotlin中,通过应用方差修饰符,我们可以为类/接口的某个类型参数(声明点方差)或类型参数(使用点方差)获得协变/逆变行为。不过,这里存在一些限制需要我们注意。为了确保安全,Kotlin编译器对类型参数的使用位置进行了限制。
- 不变修饰符 :当使用不变修饰符(类型参数默认无方差修饰符)时,类型参数可以在输入(函数参数类型)和输出(函数返回类型)位置使用。示例如下:

interface Stack<T> {
    fun push(t:T) // 泛型类型在输入位置
    fun pop():T // 泛型类型在输出位置
    fun swap(t:T):T // 泛型类型在输入和输出位置
    val last: T // 泛型类型在输出位置
    var special: T // 泛型类型在输出位置
}
  • 方差修饰符 :使用方差修饰符时,类型参数只能限制在单一位置,即只能作为方法参数类型(输入)或方法返回值类型(输出)。类要么是生产者,要么是消费者,不能兼具两者功能。示例如下:
class ConsumerProducer<in T, out R> {
    fun consumeItemT(t: T): Unit { } // 1
    fun consumeItemR(r: R): Unit { 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值