Middle
Kas ir sealed klases un kāds ir to mērķis?
sobes.tech AI
Atbilde no AI
Sealed-klases irrieģē ierobežotas manto hierarhijas. Tās tiek izmantotas ierobežotam iespējamā stāvokļu vai vērtību kopam pārstāvēt.
Galvenās īpašības un mērķis:
- Ierobežota hierarhija: Sealed-klases mantinieki jādeklarē tajā pašā failā vai iekšā sealed-klasē pirms Kotlin 1.5. No versijas 1.5 šis ierobežojums ir mazināts: mantinieki var būt jebkurā tajā pašā paketē esošajā failā.
- Stāvokļiem ar enum-klasēm: Atšķirībā no enum-klasēm, katrs sealed-klases mantinieks var būt ar savu stāvokli un uzvedību.
- Pilnīgs
when: Kompilators nodrošina, kawhenbloks, kas paredzēts sealed-klases instancēm, ir pilnīgs (visi gadījumi ir iekļauti), ja nav norādītaelsedaļa.
Piemērs:
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>() // Vienīgais instances
}
fun processResult(result: Result<String>) {
when (result) {
is Result.Success -> {
// Veiksmīga rezultāta apstrāde
println("Data: ${result.data}")
}
is Result.Error -> {
// Kļūdas apstrāde
println("Error: ${result.exception.message}")
}
Result.Loading -> {
// Ielādes stāvokļa apstrāde
println("Loading data...")
}
// `else` daļa nav nepieciešama, jo visi apakšklases
// Result ir apstrādātas ar kompilatoru
}
}
Mērķis:
- Droša stāvokļu attēlošana: uzticami attēlo galīgo iespējamā stāvokļu skaitu, piemēram, tīkla pieprasījuma rezultātu (
Success,Error,Loading). - Koda lasāmības uzlabošana: padara kodu skaidrāku, apstrādājot dažādus gadījumus.
whenizteikumu drošības uzlabošana: kompilators palīdz izvairīties no neapstrādātiem gadījumiem.- Aizstāj enum-klases ar stāvokļiem: kad nepieciešams saistīt datus ar konkrētiem "variantiem".
Tādējādi, sealed-klases nodrošina elastīgu veidu, kā modelēt galīgos vērtību kopumus ar iespēju glabāt specifiskus datus katrai vērtībai, vienlaikus nodrošinot drošību un skaidrību šo vērtību apstrādē when izteiksmēs.