美文网首页
逆变,协变

逆变,协变

作者: sankemao | 来源:发表于2019-04-01 20:15 被阅读0次
协变 逆变
kotlin out in
java extends super

逆变

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

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

逆变用于消费场景,consume函数接收类型为T,Consumer能消费产品T以及T的父类

协变

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

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

协变用于生产场景,produce函数返回类型是T,这样我们就能安全的读取Producer产生的产品:T或T的子类

总结

消费者的T类型范围要大于生产者,消费者范围尽可能大,用super,生产者范围要尽可能小,用extends,这样才安全。

相关文章

网友评论

      本文标题:逆变,协变

      本文链接:https://www.haomeiwen.com/subject/bipbbqtx.html