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 {
超级会员免费看
订阅专栏 解锁全文
3573

被折叠的 条评论
为什么被折叠?



