如何解决如何初始化通用声明的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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。