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

问题描述

我正在调查Kotlin import sys sys.setrecursionlimit(10**8) T = dict() def downToZero(n): if n in T : return T[n] if n==1 : return 1 T[n] = 1+downToZero(n-1) return T[n] x = int(input()) print(downToZero(x)) / MutableStateFlow,并想在通用基类中声明我的StateFlow,如下所示:-

MutableStateFlow

我遇到的问题是MutableStateFlow具有强制性的初始值。

我看不到如何提供类型“ class MyBaseClass<S> { private val internalState = MutableStateFlow<S>(//WHAT GOES HERE????//) val state: StateFlow<S> get() = internalState } ”的通用初始值

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

解决方法

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

abstract class MyBaseClass<S> {

    abstract val initialState: S

    private val internalState = MutableStateFlow<S>(initialState)

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

}
,

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...