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

Getter und Setter in Kotlin

In diesem Artikel werden Sie mithilfe eines Beispiels lernen, getter und setter in Kotlin zu verwenden.

Bevor Sie getter und setter lernen, sollten Sie am besten bereitsKotlin-Klassen und -Objekte.

In der Programmierung wird der getter verwendet, um den Wert der Eigenschaft zu erhalten. Ebenso wird der setter verwendet, um den Wert der Eigenschaft zu setzen.

In Kotlin sind getter und setter optional. Wenn sie nicht im Programm erstellt werden, werden sie automatisch generiert.

Wie arbeiten getter und setter?

Nachfolgendes Kotlin-Codebeispiel

class Person {
    var name: String = "defaultValue"
}

entspricht

class Person {
    var name: String = "defaultValue"
    // getter
    get() = field
    // setter
    set(value) {
        field = value
    }
}

Beim Instanziieren eines Objekts der Klasse Person und Initialisieren des Attributs name wird der Wert an die Parameter des Setters übergeben und field wird auf value gesetzt.

val p = Person()
p.name = "jack"

Wenn Sie nun auf das Attribut name des Objekts zugreifen, erhalten Sie aufgrund des Codes get()=field den field

println("${p.name}")

Dies ist ein Beispiel, wie es funktioniert:

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
    }
}

Wenn das Programm ausgeführt wird, lautet die Ausgabe:

jack

Standardmäßig funktioniert das so, wie getter und setter arbeiten. Aber Sie können getter und setter verwenden, um den Wert der Eigenschaften zu ändern (Wert ändern).

Beispiel: Änderung der Wertigkeit der Eigenschaften

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
}

Wenn das Programm ausgeführt wird, lautet die Ausgabe:

Maria: Tatsächlicher Alter = 15
Maria: Virtueller Alter = 18
Angol: Tatsächlicher Alter = 35
Angol: Virtueller Alter = 32

Hier funktioniert die Eigenschaft ActialAge wie erwartet.

Allerdings gibt es andere Logiken, um den Setter des Programms zu setzen und den Wert der Eigenschaft age zu ändern.