kotlin 泛型

1.协变 逆变 不变

class Test(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 List 无任何关系
List 是 List子类型

T : 协变 只读 这样的对象成为 生成者 
E : 逆变  写入数据 这样的对象成为 消费者
F :  不变

 = out  
 = in 

java 的PECS 原则:

extends限定了通配符类型的上界,所以我们可以安全地从其中读取;

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

我们把那些只能从中读取的对象称为生产者(Producer),

我们可以从生产者中安全地读取;只能写入的对象称为消费者(Consumer)。

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

 

你可能感兴趣的:(kotlin 泛型)