Middle
Mire használják a data- és sealed-osztályokat Kotlinben?
sobes.tech MI
Válasz az MI-től
Az adatszolgáltató osztályok megkönnyítik az adatok tárolására szolgáló osztályok létrehozását. A fordító automatikusan generálja számukra:
equals()hashCode()toString()copy()componentN()destrukturáláshoz
adat osztály User(val név: String, val életkor: Int)
// Használat
val user = User("Alice", 30)
println(user) // Kiírja User(név=Alice, életkor=30)
val user2 = user.copy(életkor = 31)
val (név, életkor) = user // Destrukturálás
A lezárt osztályok (sealed) korlátozott öröklődési hierarchiát képviselnek, ahol minden lehetséges alosztály ismert a fordítási időben. Ez lehetővé teszi, hogy azokat when kifejezésekben else nélkül használjuk, így garantálva az összes lehetőség teljes ellenőrzését.
lezárt osztály Result {
adat osztály Success(val adat: String) : Result()
adat osztály Error(val üzenet: String) : Result()
objektum Loading : Result() // Objektum, mivel paraméter nélküli
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Siker: ${result.adat}")
is Result.Error -> println("Hiba: ${result.üzenet}")
Result.Loading -> println("Betöltés...")
}
}
Összehasonlítás:
| Jellemző | Adat osztály | Lezárt osztály |
|---|---|---|
| Cél | Adatok tárolása | Korlátozott öröklődési hierarchia |
| Képességek | Automatikus metódus generálás | Teljes körű ellenőrzés when-ben |
| Alosztályok | Nincs specifikus korlátozás | Ugyanabban a fájlban vagy modulban kell lenniük |
| Használat | Adatmodellek, DTO-k | Állapotok, események, variánsok reprezentálása |