在 Kotlin 中,自定义 setter 的存在是否会影响初始化 var 属性的必要性?

问题描述 投票:0回答:1
class Student (private val age: Int){
    var isAdultA
        get() = this.age >= 20
        set(value) {}

    var isAdultB // "Property must be initialized"
        get() = this.age >= 20
}

你好, 我遇到过这样的情况:isAdultA 编译没有任何问题,但 isAdultB 给出“属性必须初始化”错误消息。虽然我知道 isAdultB 没有显式定义 setter,但我知道默认 setter 是自动生成的。 isAdultA 和 isAdultB 的根本区别是什么?为什么 isAdultA 可行而 isAdultB 不行?

我将不胜感激任何帮助。谢谢你。

kotlin properties initialization var
1个回答
0
投票

如果我们使用访问器的默认实现,那么编译器会为我们生成一个支持字段并获取/设置该字段。在您的示例中,编译器生成

isAdultB
字段,然后
setAdultB()
方法设置该字段的值。
isAdultB
永远不会在任何地方被读取。因为我们有一个字段,所以我们必须将其初始化为某个值。

另一方面,

isAdultA
根本不需要生成任何字段,因此我们不必初始化它。

© www.soinside.com 2019 - 2024. All rights reserved.