Junior
Hogyan működnek az adat osztályok Kotlinben?
sobes.tech MI
Válasz az MI-től
A Kotlin adat osztályokat adatok tárolására használják. A fordító automatikusan generálja a szabványos metódusokat:
equals(): Az példányokat az attribútumaik értékei alapján hasonlítja össze.hashCode(): Az attribútumértékek alapján generál egy hash kódot.toString(): Visszaad egy sztring reprezentációt, amely tartalmazza az összes attribútum nevét és értékét.copy(): Létrehoz egy másolatot az objektumról, szükség szerint módosítva a megadott attribútumokat.componentN(): Metódusok az destrukturáláshoz (az objektum felbontása különálló attribútumokra).
// Adat osztály példa
data class User(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 30)
val user2 = User("Alice", 30)
val user3 = User("Bob", 25)
// equals()
println(user1 == user2) // true
println(user1 == user3) // false
// toString()
println(user1.toString()) // User(name=Alice, age=30)
// copy()
val user4 = user1.copy(age = 31)
println(user4) // User(name=Alice, age=31)
// componentN() és destrukturálás
val (name, age) = user1
println("Név: $name, Kor: $age") // Név: Alice, Kor: 30
}
Kulcsfontosságú pontok:
- Minden tulajdonság, amit a fő konstruktorban definiálnak,
valvagyvarkell legyen. - Az adat osztály nem lehet
abstract,open,sealedvagyinner. - Az adat osztályok örökölhetnek más osztályokat vagy implementálhatnak interfészeket.
- A fő konstruktoron kívül deklarált tulajdonságok nem vesznek részt a szabványos metódusok generálásában.
| Metódus | Leírás |
|---|---|
equals() |
Összehasonlítja a fő konstruktor tulajdonságait. |
hashCode() |
Hash kódot generál a fő konstruktor tulajdonságai alapján. |
toString() |
Megjeleníti a fő konstruktor tulajdonságainak sztring reprezentációját. |
copy() |
Felületi másolatot készít, lehetőséggel a tulajdonságok módosítására. |
componentN() |
Hozzáférés a tulajdonságokhoz a deklaráció sorrendjében. |
A adat osztályok jelentősen leegyszerűsítik a POJO (Plain Old Java Object) vagy DTO (Data Transfer Object) kezelését, csökkentve a boilerplate kódot.