在Kotlin中我可以用private set代替private瓦尔吗?

raogr8fs  于 2022-12-23  发布在  Kotlin
关注(0)|答案(2)|浏览(156)

我看了一些Kotlin项目的示例代码,我发现很多作者都喜欢代码A。
我觉得代码B更简单。
1:代码B是好方法吗?
2:我可以在Android Studio中使用private set而不是private瓦尔吗?

代码A

private val _uiState = MutableStateFlow(InterestsUiState(loading = true))
val uiState: StateFlow<InterestsUiState> = _uiState.asStateFlow()

代码B

var uiState = MutableStateFlow(InterestsUiState(loading = true))
    private set
axzmvihb

axzmvihb1#

A和B不是同一个代码。
在代码A中,将另一个变量定义为StateFlow,以防止在类外更改StateFlow中的值。
在代码B中,可以从类外更新StateFlow中的值,因为可以引用MutableStateFlow
变异状态变量本身与StateFlow中的变异状态不同。
StateFlow中的值发生变化但StateFlow本身发生变化时,观察StateFlow的观察者收到事件。
换句话说,您应该使用代码A来防止从外部发生意外变异

vhmi4jdf

vhmi4jdf2#

我看过这个例子

var userName by mutableStateOf("")
   private set

但是我认为对于更好的封装来说最好的是这样,否认从单一真实来源(视图模型保持器和负责管理状态)之外改变useName的可能性

private var _userName by mutableStateOf("")
    val userName
        get() = _userName

相关问题