Kotlin 形变(协变)

协变 (variance)

out 关键字

public interface StateFlow<out T> : SharedFlow<T> {
    /**
     * The current value of this state flow.
     */
    public val value: T
}

此函数用于读取流的值,不需要异步地 collect
在这里用out声明后,可以向上转型
类可以默认向上转型,但是泛型不行,因为这不是继承关系,而是多个类关系

in 关键字 逆变 (Contravariance)

interface Consumer<in T> {
    fun consume(item: T) // T 作为参数进来
}

没什么,父类能被处理,子类也可以
(当然,类这样做是不行的,除非原本就是子类对象,但是是父类类型
要解决这个问题,你可以

1.手动包装

val father = father()
val me = me (father.personality,age = 0 )

2.猫王操作符 + ass

val dog = animal as? Dog ?: Dog(animal.name, 0) //(转型失败会返回一个新的,或者手动指定一个新的
posted @ 2026-04-23 11:27  气温骤降  阅读(14)  评论(0)    收藏  举报