编辑这个页面须要登录或更高权限!

Kotlin Getter 和 Setter

在本文中,您将借助一个示例学习在Kotlin中使用getter和setter。

在学习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 属性时,它将传递给 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属性的值。