我可以在 kotlin 中始终使用 private set 而不是 private val 吗?

Hel*_*oCW 6 kotlin

我读了一些 kotlin 项目示例代码,我发现很多作者喜欢代码 A。

我认为代码B更简单。

1:代码B是个好方法吗?

2:我可以在 Android Studio 中始终使用 private set 代替 private val 吗?

代码A

private val _uiState = MutableStateFlow(InterestsUiState(loading = true))
val uiState: StateFlow<InterestsUiState> = _uiState.asStateFlow()
Run Code Online (Sandbox Code Playgroud)

代码B

var uiState = MutableStateFlow(InterestsUiState(loading = true))
    private set
Run Code Online (Sandbox Code Playgroud)

MJ *_*dio 12

A、B 不是同一个代码。

在代码 A 中,定义另一个变量,以防止从类外StateFlow更改值。StateFlow

StateFlow在代码 B 中,您可以从类外更新值。因为你可以参考MutableStateFlow

变异状态变量本身和变异状态StateFlow是不同的。

观察者观察的StateFlow是当值StateFlow发生变化但StateFlow本身发生变化时收到的事件。

换句话说,您应该使用代码 A 来防止来自外部的意外变异

  • @HelloCW 不。`private set`使`var`在外部看起来像`val`,但它仍然是`MutableStateFlow`,所以你仍然可以修改它的内容(正如它的名字所暗示的)。您需要了解 `val`/`var` 和 `StateFlow`/`MutableStateFlow` 之间的区别。它们是两种独立的、共同作用的可变性/不可变性。你可以有“val MutableStateFlow”和“var StateFlow”,它们是非常不同的东西。请参阅:/sf/ask/3620276061/ 特别是第二个答案,列出了所有 4 种可能性。 (2认同)