逆变,协变

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

协变

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

//java版本
interface Production{
        T produce()
}

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

逆变

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

//java版本
interface Consumer{
        void consume(T item)
}

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

你可能感兴趣的:(逆变,协变)