引言
無論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。默認情況下是 不變
能讀取 能修改 。