Middle
Mi a sealed osztályok és mi a céljuk?
sobes.tech MI
Válasz az MI-től
Zárt osztályok korlátozott öröklődési hierarchiákat képviselnek. Ezeket arra használják, hogy korlátozott halmazát jelenítsék meg a lehetséges állapotoknak vagy értékeknek.
Fő jellemzők és cél:
- Korlátozott öröklődés: A zárt osztály leszármazottait Kotlin 1.5 előtt ugyanabban a fájlban vagy a zárt osztályon belül kell deklarálni. Az 1.5-ös verziótól ez a korlátozás enyhült: a leszármazottak bármely fájlban lehetnek ugyanabban a csomagban.
- Állapotos enum osztályok: Ellentétben az enum osztályokkal, minden leszármazott saját állapottal és viselkedéssel rendelkezhet.
- Teljes
when: A fordító garantálja, hogy awhenblokk egy példányára a zárt osztálynak teljes (minden esetet lefed), ha nem adunk megelseágat. Ez csökkenti a futási időben előforduló hibák valószínűségét.
Példa:
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>() // Egységes példány
}
fun processResult(result: Result<String>) {
when (result) {
is Result.Success -> {
// Sikeres eredmény feldolgozása
println("Data: ${result.data}")
}
is Result.Error -> {
// Hiba feldolgozása
println("Error: ${result.exception.message}")
}
Result.Loading -> {
// Betöltési állapot feldolgozása
println("Loading data...")
}
// `else` ág nem szükséges, mivel minden alosztályt
// a fordító lefed
}
}
Cél:
- Biztonságos állapotábrázolás: Megbízhatóan ábrázolja a lehetséges állapotok végső halmazát, például egy hálózati kérés eredményét (
Success,Error,Loading). - A kód olvashatóságának javítása: Világosabbá teszi a kódot a különböző esetek kezelésében.
- A
whenkifejezések megbízhatóságának növelése: A fordító segít elkerülni a nem kezelt eseteket. - Állapotos enum osztályok helyettesítése: Amikor adatokat kell kötni egy "változathoz" egy enumerációban.
Így a zárt osztályok rugalmas módot kínálnak a végső értékkészletek modellezésére, lehetőséget adva arra, hogy minden értékhez specifikus adatokat tároljunk, miközben biztonságot és világosságot nyújtanak ezeknek az értékeknek a when kifejezésekben történő kezelésében.