我正在使用 Kotlin 2.0 中引入的新支持字段功能,但是当我在不是某个或另一个的超类/子类的数据类型上使用它时遇到一些问题。
private val _youTubeVideosState = Channel<YouTubeVideosState>()
val youTubeVideosState = _youTubeVideosState.receiveAsFlow()
如何使用支持字段对其进行转换?我尝试了以下方法,但无法访问 Channel 的
send()
方法。
val youTubeVideosState: Flow<YouTubeVideosState>
field = Channel<YouTubeVideosState>().receiveAsFlow()
如果我尝试下面的方法,它会抱怨该类型不是子类的超类。
val youTubeVideosState: Flow<YouTubeVideosState>
field = Channel<YouTubeVideosState>()
这样做没有意义。 Flow和Channel不存在层级关系。属性类型必须是字段类型的超类型,因为此功能的工作方式是字段中的值仅向上转换为属性的类型。它仍然是相同的实例/引用。
receiveAsFlow()
创建一个新的类实例。该实例必须存储在某个地方,并且它不能与通道位于同一支持字段中,因此两个属性是必要的。一个属性不能有两个支持字段。