我正在研究 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/