在学习getter和setter之前,请务必查看Kotlin 类和对象。
在编程中,getter用于获取属性的值。同样,setter用于设置属性的值。
在 Kotlin 中,getter 和 setter 是可选的,如果您未在程序中创建它们,它们将自动生成。
getter 和 setter 如何工作?
Kotlin 中的以下代码
class Person { var name: String = "defaultValue" }
等同于
class Person { var name: String = "defaultValue" // getter get() = field // setter set(value) { field = value } }
当您实例化Person
类的对象并初始化name属性时,它会被传递给setter的参数value,并将field设置为value。
val p = Person() p.name = "jack"
现在,当您访问对象的name属性时,您将获得field,因为代码是get() = 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
getter 和 setter 默认情况下就是这样工作的。但是,您可以使用 getter 和 setter 来更改属性的值(修改值)。
示例:更改属性的值
fun main(args: Array<String>) {
val maria = Girl()
maria.actualAge = 15
maria.age = 15
println("Maria: actual age = ${maria.actualAge}")
println("Maria: pretended age = ${maria.age}")
val angela = Girl()
angela.actualAge = 35
angela.age = 35
println("Angela: actual age = ${angela.actualAge}")
println("Angela: pretended age = ${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: actual age = 15 Maria: pretended age = 18 Angela: actual age = 35 Angela: pretended age = 32
在这里,actualAge属性按预期工作。
然而,setter 中有额外的逻辑来修改age属性的值。