0Pricing
Kotlin Academy · Lektion

Benutzerdefinierte Getter und Setter mit field

Schreiben Sie berechnete Properties und benutzerdefinierte Setter mithilfe des Schlüsselworts für das Backing Field.

Benutzerdefinierte Getter und Setter mit field ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Properties sind mehr als nur Felder

Jede Kotlin-Property verfügt über einen automatisch generierten Getter und bei var zusätzlich über einen Setter. Sie können diese überschreiben, um Logik hinzuzufügen – etwa Validierung, Protokollierung oder Berechnungen.

Benutzerdefinierter Getter

Überschreiben Sie get(), um den Wert bei jedem Lesen neu zu berechnen.

class Circle(val radius: Double) {
    val area: Double
        get() = Math.PI * radius * radius
}
fun main() {
    val c = Circle(3.0)
    println(c.area) // ~28.27
}

Berechnete Properties

Berechnete Properties verfügen über kein zugrunde liegendes Feld – ihr Wert wird bei jedem Zugriff berechnet.

class Rectangle(val w: Int, val h: Int) {
    val area get() = w * h
    val perimeter get() = 2 * (w + h)
}
fun main() {
    val r = Rectangle(3, 4)
    println("${r.area}, ${r.perimeter}") // 12, 14
}

Benutzerdefinierter Setter mit field

In einem benutzerdefinierten Setter verweist field auf das zugrunde liegende Feld, also den tatsächlichen Speicherplatz.

class Temperature {
    var celsius: Double = 0.0
        set(value) {
            require(value >= -273.15) { "below absolute zero" }
            field = value
        }
}
fun main() {
    val t = Temperature()
    t.celsius = 25.0
    println(t.celsius)
    // t.celsius = -300.0 // throws
}

Zugrunde liegendes Feld wird automatisch generiert

Wenn der Getter oder Setter field verwendet, generiert Kotlin ein zugrunde liegendes Feld. Wenn keiner von beiden dies tut, wird kein Feld erstellt – die Property ist rein berechnet.

class Counter {
    var count: Int = 0
        set(value) {
            println("Setting count from $field to $value")
            field = value
        }
}
fun main() {
    val c = Counter()
    c.count = 5
    c.count = 10
}

Setter mit Seiteneffekten

Verwenden Sie benutzerdefinierte Setter zur Protokollierung, für Änderungsbenachrichtigungen oder zur Synchronisierung abhängiger Zustände.

class Brightness {
    var level: Int = 50
        set(value) {
            val clamped = value.coerceIn(0, 100)
            println("Brightness -> $clamped")
            field = clamped
        }
}
fun main() {
    val b = Brightness()
    b.level = 75
    b.level = 150 // clamps to 100
    println(b.level)
}

Privater Setter

Markieren Sie den Setter mit private, um eine schreibgeschützte API bereitzustellen und gleichzeitig interne Änderungen zu ermöglichen.

class Score {
    var value: Int = 0
        private set
    fun increment() { value++ }
    fun reset() { value = 0 }
}
fun main() {
    val s = Score()
    s.increment(); s.increment()
    println(s.value) // 2
    // s.value = 100 // ERROR: setter is private
}

Validierung im Setter

Benutzerdefinierte Setter sind der natürliche Ort für die Validierung von Eingaben.

class Email {
    var address: String = ""
        set(value) {
            require(value.contains("@")) { "invalid email" }
            field = value
        }
}
fun main() {
    val e = Email()
    e.address = "ada@example.com"
    println(e.address)
}

Getter mit Logik

Getter können gespeicherten Zustand umwandeln – etwa einen gespeicherten Wert formatieren oder einen Standardwert anwenden.

class Profile(_name: String?) {
    var rawName: String? = _name
    val displayName: String
        get() = rawName ?: "(unset)"
}
fun main() {
    val p = Profile(null)
    println(p.displayName) // (unset)
}

val und var im Vergleich

val-Properties besitzen nur einen Getter, aber keinen Setter; var-Properties besitzen beide.

class Box {
    val readOnly: Int get() = 42
    var readWrite: Int = 0
}
fun main() {
    println(Box().readOnly)
    val b = Box(); b.readWrite = 5; println(b.readWrite)
}

Häufiger Fehler: Rekursion

Verwenden Sie den Eigenschaftsnamen nicht innerhalb seines eigenen Accessors – sonst entsteht eine Endlosrekursion. Verwenden Sie stattdessen field.

class Wrong {
    var x: Int = 0
        set(value) {
            // x = value // INFINITE RECURSION — calls setter again
            field = value // CORRECT
        }
}
fun main() {
    val w = Wrong(); w.x = 42; println(w.x)
}

Kurze Überprüfung

Worauf verweist der Bezeichner field innerhalb eines benutzerdefinierten Setters?

Zusammenfassung

Überschreiben Sie get() und set(), um der Eigenschaftenzugriff-Logik hinzuzufügen. Verwenden Sie innerhalb von Accessors field, um auf das Backing Field zuzugreifen und es zu ändern. Markieren Sie Setter mit private, um eine schreibgeschützte öffentliche API bereitzustellen. Verwenden Sie berechnete Eigenschaften (ohne Backing Field), wenn der Wert immer abgeleitet wird.

Häufig gestellte Fragen

Ist die Lektion „Benutzerdefinierte Getter und Setter mit field“ kostenlos?

Ja — der vollständige Text von „Benutzerdefinierte Getter und Setter mit field“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Benutzerdefinierte Getter und Setter mit field“?

Schreiben Sie berechnete Properties und benutzerdefinierte Setter mithilfe des Schlüsselworts für das Backing Field. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Benutzerdefinierte Getter und Setter mit field“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Primärkonstruktor und Property-Parameter
  2. init-Blöcke und Initialisierungsreihenfolge
  3. Benutzerdefinierte Getter und Setter mit field
  4. lateinit und verzögerte Initialisierung
← Zurück zu Kotlin Academy