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

In Kotlin, does the presence of a custom setter affect the necessity of initializing a var property?

提问人:Joshua_Shin 提问时间:8/6/2023 更新时间:8/7/2023 访问量:25

问:

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 属性 初始化 var

评论


答:

0赞 broot 8/7/2023 #1

如果我们使用访问器的默认实现,那么编译器会为我们生成一个支持字段并获取/设置此字段。在您的示例中,编译器生成字段,然后该方法设置此字段的值。 永远不会在任何地方阅读。因为我们有一个字段,我们必须将其初始化为某个值。isAdultBsetAdultB()isAdultB

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

评论

0赞 Joshua_Shin 8/7/2023
哦!!我完全理解!多谢!!!