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

如何在data class中使用Jetpack Compose State的by委托语法?

Kotlin目前不支持你伪代码中写的在构造参数赋值时直接加by的语法,但可以通过如下方案实现你要的省略.value的调用效果:

你可以在data class内部声明私有State类型的幕后属性,再把公开的普通类型属性通过by委托给这个幕后属性,示例代码如下:

data class MyUiProps(
    // 私有State类型幕后属性,不对外暴露
    private val _message: State<String>
) {
    // 公开的普通类型属性,委托给幕后State
    var message: String by _message
}

创建实例和调用的用法完全符合你的预期:

// 从ViewModel获取状态创建实例
val props = MyUiProps(viewModel.message.observeAsState(""))
// 本地创建状态生成实例
val props = MyUiProps(remember { mutableStateOf("") })

// 直接读写属性,不需要额外加.value
props.message = "Yay no boilerplate"
val currentMsg = props.message

如果你的属性是只读状态,把var message改成val message即可,逻辑完全兼容。该方案不会破坏原有单向数据流的设计规则,只是通过Kotlin委托的能力消除了.value的样板代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:24:10