kotlin 泛型

1.协变 逆变 不变

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 : 协变 只读 这样的对象成为 生成者 
E : 逆变  写入数据 这样的对象成为 消费者
F :  不变

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

java 的PECS 原则:

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

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

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

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

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

 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容