逆变,协变

协变 逆变
生产,返回类型 消费,参数
kotlin out in
java extends super

协变

//kotlin版本
interface Production<out T> {
        fun produce(): T
}

//java版本
interface Production<? extends T>{
        T produce()
}

协变用于生产场景,即类型T作为类Production中方法的返回类型。
Production实例可以安全的用父类接收,因为生产出来的Rice属于Food。
Production<Food> f = Production<Rice>();

逆变

//kotlin版本
interface Consumer<in T> {
        fun consume(item : T)
}

//java版本
interface Consumer<? super T>{
        void consume(T item)
}

逆变用于消费场景,即类型T作为类Consumer中方法的参数类型。
Consumer实例可以安全的用子类接收,因为能消费Food,当然就能消费Rice。
Consumer<Rice> r = Consumer<Food>()

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

推荐阅读更多精彩内容