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
- Podstawy data class: automatycznie generowane metody
- Kopiowanie za pomocą copy() i częściowe przesłanianie
- Deklaracje destrukturyzujące z componentN
- Data class w kolekcjach i jako klucze map