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, etwhenplokk, mis on mõeldud sealed-klassi eksemplarile, on täielik (kõik juhtumid on kaetud), kuielseharu 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.
whenvä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.