English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Getter y setter en Kotlin

在本文中,您将借助一个示例学习在 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
    }
}

Al ejecutar el programa, la salida será:

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
}

Al ejecutar el programa, la salida será:

玛莉亚: Edad real  = 15
玛莉亚: Edad virtual  = 18
安戈洛: Edad real  = 35
安戈洛: Edad virtual  = 32

Aquí, la propiedad ActialAge funciona como se espera.

Sin embargo, hay otros lógicos que pueden modificar el valor de la propiedad age mediante el setter del programa.