提问人:Joshua_Shin 提问时间:8/6/2023 更新时间:8/7/2023 访问量:25
在 Kotlin 中,自定义 setter 的存在是否会影响初始化 var 属性的必要性?
In Kotlin, does the presence of a custom setter affect the necessity of initializing a var property?
问:
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 不可行?
我将不胜感激任何帮助。谢谢。
答:
0赞
broot
8/7/2023
#1
如果我们使用访问器的默认实现,那么编译器会为我们生成一个支持字段并获取/设置此字段。在您的示例中,编译器生成字段,然后该方法设置此字段的值。 永远不会在任何地方阅读。因为我们有一个字段,我们必须将其初始化为某个值。isAdultB
setAdultB()
isAdultB
另一方面,根本不需要生成任何字段,因此我们不必初始化它。isAdultA
评论
0赞
Joshua_Shin
8/7/2023
哦!!我完全理解!多谢!!!
评论