Middle
Vai tu pazīsti sealed klases un kāda ir to īpašība?
sobes.tech AI
Atbilde no AI
Jā, pazīstu.
sealed klases raksturojums ir tas, ka tās ļauj ierobežot mantošanas hierarhiju. Visas tiešās sealed klases apakštipas ir jādeklarē tajā pašā failā. Tas nodrošina, ka kompilators zina visus iespējamos apakštipus, kas ir noderīgi, pārbaudot when izteikumu pilnību.
Piemērs:
sealed class Result {
data class Success(val message: String) : Result()
data class Error(val code: Int, val description: String) : Result()
object Loading : Result() // Singleton ielādes stāvoklim
}
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Veiksme: ${result.message}")
is Result.Error -> println("Kļūda ${result.code}: ${result.description}")
Result.Loading -> println("Ielādē...")
// Nav nepieciešams else, jo kompilators zina visas iespējas
}
}
Priekšrocības:
- Drošība: Garantē
whenizteikumu pilnību bezelse. - Skatāmība: Skaidri norāda ierobežotu iespējamās stāvokļu vai apakštipu kopu.
- Kontrole: Novērš ārējo nekontrolētu mantošanu.
Atšķirība no enum class:
sealed klases var saturēt dažādu datu tipu katram apakštipam (piemēram, Success un Error), kamēr enum class elementi ir statiski un var saturēt tikai noteiktas īpašības, kas ir kopīgas visiem. sealed klases var arī saturēt objektu instances (Loading).