Sobes.tech
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