Sobes.tech
Middle

Ismered a sealed osztályokat, és mi a különlegességük?

sobes.tech MI

Válasz az MI-től

Igen, ismerem.

A sealed osztályok jellemzője, hogy lehetővé teszik az öröklődési hierarchia korlátozását. Minden közvetlen származékos típusnak ugyanabban a fájlban kell lennie. Ez biztosítja, hogy a fordító minden lehetséges altípust ismerjen, ami hasznos a when kifejezések teljességének ellenőrzésében.

Példa:

sealed class Result {
    data class Success(val message: String) : Result()
    data class Error(val code: Int, val description: String) : Result()
    object Loading : Result() // Singleton a betöltési állapothoz
}

fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Siker: ${result.message}")
        is Result.Error -> println("Hiba ${result.code}: ${result.description}")
        Result.Loading -> println("Betöltés...")
        // Nincs szükség else-re, mivel a fordító minden lehetőséget ismer
    }
}

Előnyök:

  • Biztonság: Garantálja a when kifejezések teljességét, else nélkül.
  • Átláthatóság: Egyértelműen jelzi a lehetséges állapotok vagy altípusok korlátozott halmazát.
  • Irányítás: Megakadályozza a külső kontroll nélküli öröklődést.

Különbség az enum class-tól: A sealed osztályok különböző adattípusokat tartalmazhatnak minden altípushoz (például Success és Error), míg az enum class elemei statikusak és csak meghatározott tulajdonságokat tartalmazhatnak, amelyek minden elemre vonatkoznak. A sealed osztályoknak lehetnek példány-objektumaik (Loading).