3

我正在调查 Kotlin MutableStateFlow/StateFlow并希望MutableStateFlow在通用基类中声明 my ,如下所示:-

class MyBaseClass<S> {

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

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

}

我坚持的问题是 MutableStateFlow 有一个强制性的初始值。

我看不到如何提供类型“ S”的通用初始值

是否可以使用这种使用通用基类实例变量的方法?

4

2 回答 2

2

建立在 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()

于 2020-10-22T09:51:33.437 回答
1

您可以从派生类中获取默认初始状态值,例如,

abstract class MyBaseClass<S> {

    abstract val initialState: S

    private val internalState = MutableStateFlow<S>(initialState)

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

}
于 2020-09-03T19:54:37.347 回答