Kotlin 属性的 getters 和 setters
提示
- Kotlin 中的获取器和设置器的作用:获取器用于获取属性的值,而设置器用于设置属性的值。在 Kotlin 中,如果未显式定义,它们会自动生成。
- 属性值的自动和自定义处理:默认情况下,设置器将传入值赋给属性,获取器返回属性值。但可以自定义这些行为来修改和处理值。
- 示例说明:提供了一个示例,其中展示了如何使用 自定义的获取器和设置器来修改属性值,例如基于年龄的条件来调整属性值。
[在学习获取器和设置器之前,请确保查看Kotlin 类和对象。
在编程中,获取器用于获取属性的值。类似地,设置器用于设置属性的值。
在 Kotlin 中,获取器和设置器是可选的,如果你在程序中不创建它们,将会自动生成。
获取器和设置器是如何工作的?
以下 Kotlin 代码
class Person {
var name: String = "defaultValue"
}
等同于
class Person {
var name: String = "defaultValue"
// 获取器
get() = field
// 设置器
set(value) {
field = value
}
}
当你实例化 Person
类的对象并初始化 name
属性时,它被传递给设置器参数 value
并将 field
设置为 value
。
val p = Person()
p.name = "jack"
现在,当你访问对象的 name
属性时,由于代码 get() = field
的原因,你将得到 field
。
println("${p.name}")
以下是一个工作示例:
fun main(args: Array<String>) {
val p = Person()
p.name = "jack"
println("${p.name}")
}
class Person {
var name: String = "defaultValue"
get() = field
set(value) {
field = value
}
}
当你运行程序时,输出将是:
jack
这就是获取器和设置器的默认工作方式。然而,你可以使用获取器和设置器更改属性的值(修改值)。
示例:更改属性的值
fun main(args: Array<String>) {
val maria = Girl()
maria.actualAge = 15
maria.age = 15
println("Maria: 实际年龄 = ${maria.actualAge}")
println("Maria: 假装年龄 = ${maria.age}")
val angela = Girl()
angela.actualAge = 35
angela.age = 35
println("Angela: 实际年龄 = ${angela.actualAge}")
println("Angela: 假装年龄 = ${angela.age}")
}
class Girl {
var age: Int = 0
get() = field
set(value) {
field = if (value < 18)
18
else if (value >= 18 && value <= 30)
value
else
value-3
}
var actualAge: Int = 0
}
当你运行程序时,输出将是:
Maria: 实际年龄 = 15
Maria: 假装年龄 = 18
Angela: 实际年龄 = 35
Angela: 假装年龄 = 32
这里,actualAge
属性按预期工作。
然而,设置器中有额外的逻辑来修改 age
属性的值。