跳到主要内容

Kotlin 属性的 getters 和 setters

提示
  1. Kotlin 中的获取器和设置器的作用:获取器用于获取属性的值,而设置器用于设置属性的值。在 Kotlin 中,如果未显式定义,它们会自动生成。
  2. 属性值的自动和自定义处理:默认情况下,设置器将传入值赋给属性,获取器返回属性值。但可以自定义这些行为来修改和处理值。
  3. 示例说明:提供了一个示例,其中展示了如何使用自定义的获取器和设置器来修改属性值,例如基于年龄的条件来调整属性值。

[在学习获取器和设置器之前,请确保查看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 属性的值。