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

Jetpack Compose中@Composable内使用get()属性报错如何解决

问题原因

这是Jetpack Compose编译器的固有语法限制:目前不支持在@Composable注解的函数内部,声明带有自定义getter/setter的属性。
Kotlin原生本身支持在函数内定义带自定义访问器的属性,因此你把对应代码写在@Composable外部时可以正常运行,只有放到Composable函数内部才会触发语法报错。

可行的替代方案

根据你的使用场景,可以选择以下任意一种方式实现相同效果:

  • 把带自定义访问器的属性移到@Composable函数外部,作为顶层属性或者类的成员属性,即可正常使用get/set逻辑。
  • 如果逻辑必须绑定在Composable内部,将自定义访问器替换为普通函数实现。比如你示例中的val g:Int get()=88可以改写成:
    @Composable
    fun Test() {
        fun g() = 88
        // 后续使用时调用g()即可
    }
    
  • 如果自定义访问器的逻辑依赖Compose内部的状态变量,推荐用derivedStateOf封装计算逻辑,还能自带性能优化:
    @Composable
    fun Test() {
        val baseCount by remember { mutableStateOf(0) }
        // 替代自定义getter,仅当baseCount变化时才会重新计算
        val doubledCount by remember { derivedStateOf { baseCount * 2 } }
    }
    
  • 对于带自定义setter的var属性,同样可以把set逻辑封装成普通函数实现,避免在Composable内部声明带自定义访问器的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:15:01