Sobes.tech
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 a when blokk egy példányára a zárt osztálynak teljes (minden esetet lefed), ha nem adunk meg else á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 when kifejezé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.