Sobes.tech
Middle

Hogyan használjuk a lezárt osztályokat hierarchiák modellezésére Kotlinban?

sobes.tech MI

Válasz az MI-től

A lezárt osztályok (sealed classes) korlátozott öröklődési hierarchiák ábrázolására szolgálnak, ahol minden lehetséges származtatott osztály ismert a fordítási időben.

Fő jellemzők:

  • Minden közvetlen származtatott osztálynak ugyanabban a fájlban kell lennie, mint a lezárt osztálynak (Kotlin 1.5 előtt). A Kotlin 1.5-től kezdve bármelyik fájlban lehetnek ugyanabban a fordítási egységben.
  • A lezárt osztály származékai lehetnek normál osztályok, data osztályok, object deklarációk vagy más lezárt osztályok.
  • A lezárt osztály konstruktorának alapértelmezés szerint privát; más módosítók (public, protected, internal) nem engedélyezettek.
  • Lehetővé teszik a teljes (exhaustive) elemzést when kifejezésekben, garantálva, hogy minden lehetséges variáns kezelve legyen, és elkerülve az else ág használatát.

Példa a felhasználói felület állapotának modellezésére:

sealed class UiState {
    object Loading : UiState() // Betöltési állapot
    data class Success(val data: String) : UiState() // Sikeres adatbetöltés
    data class Error(val message: String) : UiState() // Hiba
}

Használat when kifejezésben:

fun handleUiState(state: UiState): String {
    return when (state) {
        UiState.Loading -> "Adatok betöltése..."
        is UiState.Success -> "Adatok sikeresen betöltve: ${state.data}"
        is UiState.Error -> "Hiba: ${state.message}"
    }
}

Előnyök:

  • Típusbiztonság: a fordító ellenőrzi, hogy minden lehetséges származtatott osztály kezelve van-e.
  • Átláthatóság: világosan mutatja, hogy milyen adat- vagy állapotváltozatok létezhetnek.
  • Kényelem: egyszerűsíti a when kifejezésekkel való munkát.