如何将 Kotlin 支持字段与 Channel 和 Flow 一起使用?

问题描述 投票:0回答:1

我正在使用 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>()
kotlin immutability mutable backing-field
1个回答
0
投票

这样做没有意义。 Flow和Channel不存在层级关系。属性类型必须是字段类型的超类型,因为此功能的工作方式是字段中的值仅向上转换为属性的类型。它仍然是相同的实例/引用。

receiveAsFlow()
创建一个新的类实例。该实例必须存储在某个地方,并且它不能与通道位于同一支持字段中,因此两个属性是必要的。一个属性不能有两个支持字段。

© www.soinside.com 2019 - 2024. All rights reserved.