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

Kotlin中修改依赖变量后,如何自动重新计算结果变量?

在Kotlin中自动更新依赖变量的计算结果

在Kotlin中,你可以通过以下几种方案实现依赖变量更新时自动重新计算result,避免重复编写赋值代码:

1. 带自定义getter的只读属性(最简单)

将result定义为带自定义getter的val,每次访问该属性时都会自动执行计算逻辑:

var valueA = 9
var valueB = 10
val result get() = valueA * valueB

println(result) // 输出 90
valueA = 15
println(result) // 输出 150

适用场景:计算逻辑简单、耗时低的场景。缺点是每次访问result都会重新计算,如果计算成本高会影响性能。

2. 利用Observable属性触发更新

如果计算逻辑较重,不想每次访问都重复计算,可以用Delegates.observable监听valueA和valueB的变化,在变量修改时主动更新result:

import kotlin.properties.Delegates

var valueA by Delegates.observable(9) { _, _, _ ->
    result = valueA * valueB
}
var valueB by Delegates.observable(10) { _, _, _ ->
    result = valueA * valueB
}
var result = valueA * valueB

println(result) // 90
valueA = 15
println(result) // 150
valueB = 20
println(result) // 300

适用场景:计算成本高的场景,只会在依赖变量修改时执行一次计算。

3. 自定义属性委托(高复用性)

如果需要在多个地方复用这种“依赖变量自动更新”的逻辑,可以自定义一个属性委托类:

import kotlin.properties.Delegates

class AutoComputed<T>(private val compute: () -> T) {
    private var currentValue: T = compute()

    fun bindTo(vararg observables: Delegates.ObservableProperty<*>) {
        observables.forEach { observable ->
            observable.addChangeListener { _, _, _ ->
                currentValue = compute()
            }
        }
    }

    operator fun getValue(thisRef: Any?, property: kotlin.reflect.KProperty<*>): T {
        return currentValue
    }
}

// 使用示例
var valueA by Delegates.observable(9) { _, _, _ -> }
var valueB by Delegates.observable(10) { _, _, _ -> }
val result = AutoComputed { valueA * valueB }.apply {
    bindTo(valueA, valueB)
}

println(result) // 90
valueA = 15
println(result) // 150
valueB = 20
println(result) // 300

这个方案把自动计算的逻辑封装起来,方便在多个地方复用,同时保留了“仅在依赖变化时计算”的性能优势。

内容的提问来源于stack exchange,提问作者Илья Мисников

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:15:40