欢迎光临
我们一直在努力

第086篇 泛型型变 in 与 out:声明处型变

型变(variance)是 Kotlin 泛型里最容易\”用过但说不清\”的一题。它的核心只有一条规则——型变位置约束:out 类型只出现在返回位,in 类型只出现在参数位——但从这一条能推导出协变/逆变哪些签名合法、哪些非法,以及为什么 List<out T> 不能接受 add。答得全的人,都是从这条规则推出来的。

先把结论放在前面:Kotlin 用声明处型变(Java 用使用处型变,即通配符 ? extends / ? super)。out T 表示协变——List<Sub> 是 List<Super> 的子类型,T 只出现在返回位置;in T 表示逆变——Consumer<Super> 可以传给 Consumer<Sub>,T 只出现在参数位置。in + out 同时标注(in out T)在 Kotlin 里是声明不变但两次投影的变体,含义是\”写时投影、读时投影\”,用在既读又写的场景(比如 MutableList<in out T> 实际等价于 Mutabl

赞(0)
未经允许不得转载:171主机测评 » 第086篇 泛型型变 in 与 out:声明处型变
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址