协变 | 逆变 | |
---|---|---|
生产,返回类型 | 消费,参数 | |
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>()