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> 無任何關(guān)系
List<String> 是 List<out String>子類型

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

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

java 的PECS 原則:

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

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

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

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

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

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容