kotlin 泛型

1.協(xié)變 逆變 不變

class Test<out T, in E, F>(val t: T, e: E, val f: F) {
    private var e: E = e

    fun get(): T = t

    fun set(e: E) {
        this.e = e
    }

    fun print() {
        println("t = $t, e = $e, f = $f")
    }
}
List<String> List<Any> 無任何關系
List<String> 是 List<out String>子類型

T : 協(xié)變 只讀 這樣的對象成為 生成者 
E : 逆變  寫入數據 這樣的對象成為 消費者
F :  不變

<? extends T> = out  
<? super T> = in 

java 的PECS 原則:

extends限定了通配符類型的上界,所以我們可以安全地從其中讀??;

而super限定了通配符類型的下界,所以我們可以安全地向其中寫入。

我們把那些只能從中讀取的對象稱為生產者(Producer),

我們可以從生產者中安全地讀取;只能寫入的對象稱為消費者(Consumer)。

因此這里就是著名的PECS原則:Producer-Extends, Consumer-Super

 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容