Sobes.tech
Middle

Mis on sealed klassid ja mis on nende eesmärk?

sobes.tech AI

Vastus AI-lt

Sealed-klassi esindavad piiratud päriluse hierarhiaid. Neid kasutatakse piiratud arvu võimalike seisundite või väärtuste esitamiseks.

Peamised omadused ja eesmärk:

  • Piiratud hierarhia: Sealed-klassi pärijad peavad olema deklareeritud samas failis või sees sealed-klassi enne Kotlin 1.5. Alates versioonist 1.5 on see piirang leevendatud: pärijad võivad olla mis tahes samas paketis asuvas failis.
  • Oleku enum-klassi: Erinevalt enum-klassi, iga sealed-klassi pärija võib omada oma olekut ja käitumist.
  • Täielik when: Kompilaator tagab, et when plokk, mis on mõeldud sealed-klassi eksemplarile, on täielik (kõik juhtumid on kaetud), kui else haru ei ole määratud.

Näide:

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>() // Üksik eksemplar
}

fun processResult(result: Result<String>) {
    when (result) {
        is Result.Success -> {
            // Eduka tulemuse töötlemine
            println("Data: ${result.data}")
        }
        is Result.Error -> {
            // Vea töötlemine
            println("Error: ${result.exception.message}")
        }
        Result.Loading -> {
            // Laadimise oleku töötlemine
            println("Loading data...")
        }
        // `else` haru ei ole vajalik, kuna kõik alamklassid
        // Result on kompilaatoriga töödeldud
    }
}

Eesmärk:

  • Turvaline olekute esitlus: usaldusväärselt näitab lõplikku võimalike olekute arvu, näiteks võrgu päringu tulemust (Success, Error, Loading).
  • Koodi loetavuse parandamine: muudab koodi selgemaks erinevate juhtumite töötlemisel.
  • when väljendite usaldusväärsuse tõstmine: kompilaator aitab vältida käsitlemata juhtumeid.
  • Asendama enum-klassi olekutega: kui on vaja siduda andmeid konkreetsete "valikute"ga.

Seega, sealed-klassi kasutatakse paindliku viisi pakkumiseks lõplikeks väärtuste kogumiteks, võimaldades salvestada spetsiifilisi andmeid iga väärtuse jaoks ning tagades turvalisuse ja selguse nende väärtuste töötlemisel when väljendites.