源码
public interface Flow<out T> { public suspend fun collect(collector: FlowCollector<T>)
}public fun interface FlowCollector<in T> { public suspend fun emit(value: T)
}
🔄 赋值兼容性的两个方向
1. Flow 的向上兼容(out)- 收集可以更抽象
val userFlow: Flow<User> = flowOf(User("Alice"))
val entityFlow: Flow<Entity> = userFlow
val anyFlow: Flow<Any> = userFlow
suspend fun collectAbstractly() {val concreteFlow: Flow<String> = flowOf("Hello")val abstractFlow: Flow<Any> = concreteFlow abstractFlow.collect { value ->println("收集到: $value")}
}
2. FlowCollector 的向下兼容(in)- 处理可以更具体
val anyCollector: FlowCollector<Any> = FlowCollector { println("处理: $it") }
val entityCollector: FlowCollector<Entity> = anyCollector
val userCollector: FlowCollector<User> = anyCollector
suspend fun processSpecifically() {val abstractProcessor: FlowCollector<Any> = FlowCollector { data ->println("通用处理: $data")}val concreteProcessor: FlowCollector<String> = abstractProcessor flowOf("Hello").collect(concreteProcessor)
}
🎯 完美的配合关系
suspend fun perfectMatch() {val stringFlow: Flow<String> = flowOf("Hello", "World")val anyProcessor: FlowCollector<Any> = FlowCollector { value ->println("处理任何类型: $value")}val anyFlow: Flow<Any> = stringFlowval stringProcessor: FlowCollector<String> = anyProcessorstringFlow.collect(stringProcessor)anyFlow.collect(anyProcessor)
}