You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中get()取值与直接赋值的差异及原因咨询

两种StateFlow暴露方式的行为差异解析

背景代码

private var _articles by mutableStateOf(getPageDataFlow(ArticleQuery()))

val articles: StateFlow<PagingData<ArticleItemEntity>>
  get() = _articles

对比两种定义方式

方式一(带getter的计算属性)

val articles: StateFlow<PagingData<ArticleItemEntity>>
  get() = _articles

方式二(直接赋值的只读变量)

val articles = _articles

差异原因

核心区别在于变量的取值逻辑和生命周期:

  • 方式一的articles是计算属性,每次访问它时都会执行get()代码块,实时返回当前_articles指向的StateFlow实例。当你重新给_articles赋值新的StateFlow后,下次访问articles自然会拿到这个最新的实例。
  • 方式二的articles是普通只读变量,它在类初始化阶段就完成了赋值,绑定的是初始化时_articles指向的那个StateFlow实例。后续即使_articles被替换为新的StateFlow,这个变量也不会自动更新,依然持有最初的旧实例引用。

内容的提问来源于stack exchange,提问作者SageJustus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:04:59