0Pricing
Kotlin Academy · Lekcja

Podstawy data class: automatycznie generowane metody

Poznaj elementy generowane przez data class: equals, hashCode, toString i copy.

Podstawy data class: automatycznie generowane metody to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Czym jest data class?

data class to klasa, której głównym zadaniem jest przechowywanie wartości. Kompilator Kotlin automatycznie generuje funkcje equals, hashCode, toString, copy i componentN.

Deklarowanie data class

Zwykłą klasę należy poprzedzić słowem data. Wszystkie parametry głównego konstruktora muszą być oznaczone jako val lub var.

data class User(val name: String, val age: Int)
fun main() {
    val u = User("Ada", 35)
    println(u)
}

Automatycznie generowane toString

Kompilator tworzy funkcję toString, która wymienia każdą właściwość wraz z jej nazwą.

data class Point(val x: Int, val y: Int)
fun main() {
    println(Point(3, 5)) // Point(x=3, y=5)
}

Automatycznie generowane equals

equals porównuje wartości wszystkich właściwości — dwie instancje z takimi samymi polami są równe niezależnie od tożsamości referencji.

data class Coord(val lat: Double, val lng: Double)
fun main() {
    val a = Coord(41.0, 29.0)
    val b = Coord(41.0, 29.0)
    println(a == b)      // true (structural)
    println(a === b)     // false (reference)
}

Automatycznie generowane hashCode

hashCode jest zgodne z equals: równe obiekty generują takie same hasze, dzięki czemu data class działają poprawnie w zbiorach i jako klucze map.

data class Key(val id: Int, val tag: String)
fun main() {
    val map = mapOf(Key(1, "a") to "one")
    println(map[Key(1, "a")]) // one
}

Automatycznie generowane copy

copy() tworzy nową instancję z takimi samymi wartościami pól, umożliwiając nadpisanie wybranych pól za pomocą argumentów nazwanych.

data class Config(val host: String, val port: Int, val tls: Boolean)
fun main() {
    val dev = Config("localhost", 8080, false)
    val prod = dev.copy(host = "prod.example.com", tls = true)
    println(prod) // Config(host=prod.example.com, port=8080, tls=true)
}

Automatycznie generowane componentN

Każda właściwość otrzymuje funkcję componentN() (component1, component2, ...), która umożliwia destrukturyzację.

data class Pair2(val first: String, val second: Int)
fun main() {
    val p = Pair2("Ada", 35)
    val (name, age) = p
    println("$name is $age")
}

Czego data class nie robi

Data class nie generuje funkcji toString dla odziedziczonych pól, domyślnie są final i nie mogą być abstract, open, sealed ani inner.

data class Sample(val n: Int)
// open data class Bad(...) // ERROR
// sealed data class Bad(...) // ERROR
fun main() { println(Sample(1)) }

Właściwości poza głównym konstruktorem

Właściwości zadeklarowane w ciele klasy NIE uczestniczą w działaniu equals, hashCode, toString ani copy.

data class Person(val name: String) {
    var nickname: String = ""
}
fun main() {
    val a = Person("Ada").apply { nickname = "Augusta" }
    val b = Person("Ada").apply { nickname = "Different" }
    println(a == b)   // true — only name matters
    println(a)         // Person(name=Ada)
}

Wartości domyślne

Połącz data class z parametrami domyślnymi, aby elastyczniej tworzyć obiekty.

data class Request(
    val url: String,
    val method: String = "GET",
    val headers: Map<String, String> = emptyMap()
)
fun main() {
    println(Request("https://api.example.com"))
}

Praktyka: klasa DTO

Data class doskonale nadają się do DTO, odpowiedzi API i obiektów wartości.

data class ApiResponse(
    val status: Int,
    val body: String,
    val timestamp: Long
)
fun main() {
    val ok = ApiResponse(200, "{}", System.currentTimeMillis())
    println(ok)
}

Szybkie sprawdzenie

Która metoda NIE jest automatycznie generowana przez kompilator Kotlin dla data class?

Podsumowanie

data class automatycznie generuje equals, hashCode, toString, copy i componentN na podstawie właściwości głównego konstruktora. Właściwości spoza konstruktora są pomijane. Data class należy używać dla DTO, obiektów wartości i wszelkich kontenerów powiązanych wartości.

Często zadawane pytania

Czy lekcja „Podstawy data class: automatycznie generowane metody” jest bezpłatna?

Tak — pełny tekst „Podstawy data class: automatycznie generowane metody” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy data class: automatycznie generowane metody”?

Poznaj elementy generowane przez data class: equals, hashCode, toString i copy. Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Podstawy data class: automatycznie generowane metody”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy data class: automatycznie generowane metody
  2. Kopiowanie za pomocą copy() i częściowe przesłanianie
  3. Deklaracje destrukturyzujące z componentN
  4. Data class w kolekcjach i jako klucze map
← Powrót do Kotlin Academy