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

Kotlin中为什么修改属性后关联属性值无法永久更新?

问题根因

你定义的fullName是初始化阶段一次性赋值的存储型属性,不会随关联属性的修改自动更新值,具体执行逻辑如下:

  • 实例化Person对象时,主构造函数先接收传入的firstName、lastName初始值,随后立刻执行类内所有属性的初始化逻辑:执行var fullName: String = firstName + lastName时,会直接把当时两个参数拼接得到的结果testfortest1存入fullName对应的内存空间,这行初始化代码在整个对象生命周期里只会执行这一次。
  • 后续执行test.lastName = "fortest2"时,仅修改了lastName属性自身存储的值,没有任何逻辑触发fullName重新计算赋值,因此fullName始终保留初始化时写入的旧值,打印结果自然是初始拼接值。

你代码里定义的fullName()方法之所以能拿到最新值,是因为方法每次被调用时,都会实时读取当前firstName、lastName的最新值做拼接计算,不存在初始化后固定存储的结果。

正确实现方式

如果需要fullName始终返回最新的拼接结果,不要给它设置固定初始值,改成自定义getter的计算属性即可,每次访问该属性时都会实时计算返回结果:

class Person(var firstName: String, var lastName: String) {
    val fullName: String
        get() = firstName + lastName

    override fun toString(): String {
        return fullName
    }
}

修改后再调整firstName或lastName的值,访问fullName就能拿到最新的拼接结果了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:06:51