kotlin - 如何初始化通用声明的 Kotlin MutableStateFlow

标签 kotlin kotlin-flow

我正在研究 Kotlin MutableStateFlow/StateFlow并想申报我的MutableStateFlow在通用基类中,如下所示:-

class MyBaseClass<S> {

private val internalState = MutableStateFlow<S>(//WHAT GOES HERE????//)

    val state: StateFlow<S>
        get() = internalState

}
我遇到的问题是 MutableStateFlow 有一个强制性的初始值。
我看不到如何提供类型“S”的通用初始值
是否可以使用这种采用通用基类实例变量的方法?

最佳答案

在 Harshith Shetty 的回答基础上,我所做的所有不同的事情就是初始化 internalState因为懒惰所以我可以避免 accessing non-final property in constructor警告

abstract class MyBaseClass<S> {

    abstract val initialState: S

    private val internalState: MutableStateFlow<S> by lazy { MutableStateFlow(initialState) }

    val state: StateFlow<S>
        get() = internalState

}
顺便说一句,没有初始值就无法初始化 MutableStateFlow。如果您绝对不想要初始值,请使用 ConflatedBroadcastChannel反而。
例如val internalState: ConflatedBroadcastChannel<S> = ConflatedBroadcastChannel()

关于kotlin - 如何初始化通用声明的 Kotlin MutableStateFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63684305/

相关文章:

dictionary - 在函数中从 Hashmap 正确返回 Int

kotlin - 更改 LiveData 的源流

kotlin - 在列表中合并多个Kotlin流,而无需等待第一个值

spring-boot - Kotlin Spring WebMvcTest Mockk

android - 如何在 kotlin 中使用 androidannotations 库?

android - 将 pagingData 3 流与另一个流相结合

android - Kotlin 多平台移动 : Flow<List<*SomeModel*>> gets mapped to Flow<NSArray> in iOS

Kotlin Flow onBackpressureDrop RxJava2 模拟

java - 将Kotlin转换为Java

android - 房间 : Conflicting Declarations