Sobes.tech
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ē when izteikumu pilnību bez else.
  • 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).