在本文中,您将借助一个示例学习在Kotlin中使用getter和setter。
在学习getter和setter之前,您最好已经了解了Kotlin类和对象。
在编程中,getter 用于获取属性的值。同样,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 参数值并将 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
默认情况下,这就是 getter 和 setter 的工作方式。但是,您可以使用 getter 和 setter来更改属性的值(修改值)。
fun main(args: Array<String>) { val maria = Girl() maria.actualAge = 15 maria.age = 15 println("玛莉亚: 实际年龄 = ${maria.actualAge}") println("玛莉亚: 虚拟年龄 = ${maria.age}") val angela = Girl() angela.actualAge = 35 angela.age = 35 println("安戈洛: 实际年龄 = ${angela.actualAge}") println("安戈洛: 虚拟年龄 = ${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 }
运行该程序时,输出为:
玛莉亚: 实际年龄 = 15 玛莉亚: 虚拟年龄 = 18 安戈洛: 实际年龄 = 35 安戈洛: 虚拟年龄 = 32
在这里,ActialAge属性按预期工作。
但是,设置程序 setter 还有其他逻辑可以修改age属性的值。