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

Kotlin中val与var定义Getter属性时幕后字段生成差异的疑问

Kotlin中val与var定义Getter属性时幕后字段生成差异的疑问

先看我写的这段代码:

class Age(var second: Int) {
    var age: Int = 4
    val isYoung // 这里不会生成幕后字段
        get() = age < 30
//  var isYoung // 为什么这里会自动生成幕后字段?
//      get() = age < 30 // 编译器提示“Property must be initialized”
}

我之前也查过类似的问题,但还是没弄明白这个差异的原因。

Kotlin官方文档里关于幕后字段的部分明确说了,只有两种情况会生成幕后字段:

  • 当属性至少使用一个访问器的默认实现时
  • 当自定义访问器通过field标识符引用它时

我上面的两个isYoung都是自定义的Getter,既没用到默认访问器,也没在Getter里用field,按道理都不该生成幕后字段才对?可为什么把val改成var之后,编译器就要求必须初始化属性,这明显是自动生成幕后字段了啊?这跟文档里的描述好像对不上,实在搞不懂哪里出问题了。

备注:内容来源于stack exchange,提问作者ybybyb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:53:01