逆变,协变

2019-04-01  本文已影响0人  sankemao
协变 逆变
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,这样才安全。

上一篇 下一篇

猜你喜欢

热点阅读