Kotlin Academy · Lektion

Kopieren mit copy() und teilweise Überschreibungen

Verwenden Sie copy(), um geänderte Instanzen zu erstellen, ohne das Original zu verändern.

Lektion 2 von 413 Schritte

Kopieren mit copy() und teilweise Überschreibungen ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Unveränderliche Aktualisierungen mit copy()

copy() erstellt eine neue Instanz einer Data Class, in der einige Eigenschaften geändert sind. Alle nicht angegebenen Eigenschaften behalten ihre ursprünglichen Werte.

Grundlagen zu copy()

Übergeben Sie benannte Argumente, um bestimmte Eigenschaften zu überschreiben.
data class Person(val name: String, val age: Int, val city: String)
val alice = Person("Alice", 30, "Berlin")
val olderAlice = alice.copy(age = 31)
println(olderAlice)  // Person(name=Alice, age=31, city=Berlin)

Mehrere Felder kopieren

Überschreiben Sie so viele Felder wie nötig.
data class Config(val host: String, val port: Int, val ssl: Boolean, val timeout: Int)
val prod = Config("prod.server", 443, true, 30)
val test = prod.copy(host = "test.server", port = 8080, ssl = false)
println(test)

copy ändert das Original nicht

copy erstellt immer ein neues Objekt. Das Original bleibt vollständig unverändert.
data class Point(val x: Int, val y: Int)
val origin = Point(0, 0)
val moved = origin.copy(x = 5)
println(origin)  // Point(x=0, y=0) — unchanged
println(moved)   // Point(x=5, y=0)

Vorsicht bei flachen Kopien

copy führt eine flache Kopie durch. Veränderliche Objekte innerhalb einer Data Class werden vom Original und von der Kopie gemeinsam verwendet.
data class Team(val name: String, val members: MutableList<String>)
val t1 = Team("A", mutableListOf("Alice"))
val t2 = t1.copy(name = "B")
t2.members.add("Bob")       // modifies SHARED list!
println(t1.members)  // [Alice, Bob] ← also changed!

Probleme mit flachen Kopien vermeiden

Verwenden Sie unveränderliche Daten innerhalb von Data Classes, um Probleme durch gemeinsam verwendete Objekte zu vermeiden.
data class Team(val name: String, val members: List<String>)  // immutable list
val t1 = Team("A", listOf("Alice"))
val t2 = t1.copy(name = "B", members = t1.members + "Bob")
println(t1.members)  // [Alice]
println(t2.members)  // [Alice, Bob]

copy in der Zustandsverwaltung

copy ist die idiomatische Methode, um den Zustand in Architekturen nach dem Redux- oder MVI-Stil zu aktualisieren.
data class UiState(val loading: Boolean, val items: List<String>, val error: String?)
fun reduce(state: UiState, action: Action) = when (action) {
    is Loading -> state.copy(loading = true)
    is Success -> state.copy(loading = false, items = action.data)
    is Error -> state.copy(loading = false, error = action.msg)
}

copy mit Standardparametern

Auch Data Classes mit vielen Eigenschaften bieten dank benannter Parameter eine komfortable Verwendung von copy.
data class Article(
    val id: Long, val title: String, val body: String,
    val published: Boolean = false, val views: Int = 0
)
val draft = Article(1L, "Hello", "Content...")
val published = draft.copy(published = true)
println(published.title)  // Hello

copy in Tests verwenden

Mit copy lassen sich Test-Fixtures einfach erstellen: Erstellen Sie ein Basisobjekt und variieren Sie nur die benötigten Felder.
val baseUser = User(id = 1, name = "Test", email = "test@test.com", active = true)
val inactiveUser = baseUser.copy(active = false)
val renamed = baseUser.copy(name = "Renamed")

copy vs Builder Pattern

Data-Class-copy() ist K otlins Antwort auf das Builder Pattern. Für komplexe Objekte mit vielen optionalen Feldern ist Data Class plus copy prägnanter.
// Java Builder:
User.builder().name("A").age(30).role("admin").build()
// Kotlin:
val u = User("A", 30, "admin")  // or copy from base

Datensatzsemantik

Data Classes mit val-Eigenschaften verhalten sich wie Java Records (JDK 16+): unveränderlich, wertbasiert und automatisch ausgebbar.
data class RGB(val r: Int, val g: Int, val b: Int)
val white = RGB(255, 255, 255)
println(white)  // RGB(r=255, g=255, b=255)

Kurze Überprüfung

Was geschieht mit der ursprünglichen Data-Class-Instanz, wenn Sie darauf copy() aufrufen?

Zusammenfassung

copy() erstellt eine neue Instanz mit überschriebenen Feldern – das Original bleibt unverändert. Ideal für Zustandsverwaltung, Tests und Konstruktionen im Builder-Stil. Achten Sie bei veränderlichen Eigenschaften auf flache Kopien. Als Nächstes: Destrukturierung!
Kostenlos starten

Lerne Kotlin mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
51
Lektionen
203

Häufig gestellte Fragen

Ist die Lektion „Kopieren mit copy() und teilweise Überschreibungen“ kostenlos?

Ja — der vollständige Text von „Kopieren mit copy() und teilweise Überschreibungen“ 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 „Kopieren mit copy() und teilweise Überschreibungen“?

Verwenden Sie copy(), um geänderte Instanzen zu erstellen, ohne das Original zu verändern. 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 2 von 4.

Wie lange dauert die Lektion „Kopieren mit copy() und teilweise Überschreibungen“?

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. Grundlagen von Data Classes: automatisch generierte Methoden
  2. Kopieren mit copy() und teilweise Überschreibungen
  3. Destrukturierende Deklarationen mit componentN
  4. Data Classes in Collections und als Map-Schlüssel
← Zurück zu Kotlin Academy