在学习getter和setter之前,请务必检查Kotlin类和对象。
在编程中,吸气剂用于获取属性的值。同样,使用setter来设置属性的值。
在Kotlin中,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属性时,它会传递给setters参数value ,并将field设置为value 。
val p = Person()
p.name = "jack"
现在,当你访问该对象的name属性,你会得到,因为代码领域 get() = field
。
println("${p.name}")
这是一个工作示例:
fun main(args: Array) {
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) {
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属性按预期方式工作。
但是,设置程序还有其他逻辑可以修改age属性的值。