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 不行?
我将不胜感激任何帮助。谢谢你。
如果我们使用访问器的默认实现,那么编译器会为我们生成一个支持字段并获取/设置该字段。在您的示例中,编译器生成
isAdultB
字段,然后 setAdultB()
方法设置该字段的值。 isAdultB
永远不会在任何地方被读取。因为我们有一个字段,所以我们必须将其初始化为某个值。
另一方面,
isAdultA
根本不需要生成任何字段,因此我们不必初始化它。