引言
无论java 通配符上限还是下限,都多少存在缺陷,要么存不安全,要么取不安全。而kotlin就解决这个问题。让out 纯输出, 让in纯输入。
java这块知识: java泛型的协变、逆变和不变-CSDN博客
协变
生产者out T 协变 【out T 此泛型能够被获取 读取 所以是out】
例子:
class Producer<out T>{
// out T 代表整个生产者类里面 这个 T 只能被读取 ,不能修改 。
// 不能被修改(编译不通过)
fun consumer (item : T){} // 这里报错。
// 只能被读取
fun producer() : T {}
}
逆变
消费者 in T 逆变 【in T 此泛型只能被修改 更新所以是 in】
例子:
class Consumer <in T>{
//只能被修改
fun comsumer(item : T){} // 消费代码
//不能被读取
fun producer() : T{} //编译不通过
}
不变
// 生产者和消费者 T。默认情况下是 不变
能读取 能修改 。