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
whenkifejezésekkel való munkát.