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
whenkifejezések teljességét,elsené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).