Middle
Kas sa tead sealed klassidest ja mis on nende omadus?
sobes.tech AI
Vastus AI-lt
Jah, ma tean.
sealed klasside omadus on see, et need võimaldavad piirata päriluse hierarhiat. Kõik otsesed sealed klassi alamliigid peavad olema deklareeritud samas failis. See tagab, et kompilaator teab kõiki võimalikke alamliike, mis on kasulik when väljendite täielikkuse kontrollimiseks.
Näide:
sealed class Result {
data class Success(val message: String) : Result()
data class Error(val code: Int, val description: String) : Result()
object Loading : Result() // Singleton laadimisoleku jaoks
}
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Edu: ${result.message}")
is Result.Error -> println("Viga ${result.code}: ${result.description}")
Result.Loading -> println("Laadimine...")
// Else ei ole vajalik, kuna kompilaator teab kõiki võimalusi
}
}
Eelised:
- Turvalisus: Tagab
whenväljendite täielikkuse ilmaelse-ita. - Lugemise lihtsus: Selgelt näitab piiratud võimalike seisundite või alamliikide kogumit.
- Kontroll: Takistab kontrollimatut pärandamist väljastpoolt.
Erinevus enum class-ist:
sealed klassidel võivad olla erinevat tüüpi andmed iga alamliigi jaoks (näiteks Success ja Error), samas kui enum class elemendid on statilised ja võivad omada ainult teatud omadusi, mis on kõigile ühised. sealed klassid võivad samuti sisaldada objekti-eksemplareid (Loading).