Kotlin中的Getter和Setter:如何声明和使用带有自定义访问器的属性?
大家好!我最近从Java开始学习Kotlin,遇到了对getter和setter工作原理的困惑。在Java中,我习惯显式声明带有访问修饰符的字段,然后为它们编写getField()和setField()方法。而在Kotlin中,据我了解,情况完全不同——有属性(properties),它们会自动生成getter和setter。
// 我尝试的示例
class Person {
var name: String = "Unknown"
var age: Int = 0
// 我尝试为age创建自定义setter
set(value) {
if (value >= 0) {
// 如何在这里访问字段?用field?还是this.age?
this.age = value // 导致递归!
} else {
println("年龄不能为负数")
}
}
}
当我运行这段代码时,由于无限递归,我得到了StackOverflowError。我知道我做错了什么,但无法弄清楚: