Middle
Mis on 'sealed' klassid Kotlinis ja millal neid kasutada?
sobes.tech AI
Vastus AI-lt
sealed klassi kasutatakse piiratud klasside hierarhia esitamiseks. Kõik otsesed sealed klassi alamklassid peavad olema määratletud samas failis või samas modulites (Kotlin 1.5+). See võimaldab kompilaatoril kontrollida, et kõik võimalikud alamliigid on when väljendis käsitletud, muutes selle täielikuks ilma else osata.
Peamised omadused:
- Kõik otsesed alamliigid peavad olema lokaalsed.
sealedklassi konstruktor on vaikimisiprivate.sealedklass ei saa olla abstraktne.- Eksemplaride loomine on keelatud.
Kasutusjuhtumid:
- Piiratud seisundite või tulemuste esitamine. Näiteks,
Loading,Success(data),Error(message):sealed class Result<out T> { data class Success<T>(val data: T) : Result<T>() data class Error(val message: String) : Result<Nothing>() object Loading : Result<Nothing>() } - Tulemuste variantide töötlemine
whenväljendis, tagades täielikkuse:fun processResult(result: Result<String>) { when (result) { is Result.Success -> println("Saadud andmed: ${result.data}") is Result.Error -> println("Viga: ${result.message}") Result.Loading -> println("Laadimine...") } // `else` osa pole vajalik, kuna kompilaator teab kõiki alamliike. } - Kasutamine enumite ekvivalendina koos andmete kapseldamisega igas variandis:
Võrdlus enum klassidega:
| Omadus | enum class |
sealed class |
|---|---|---|
| Näited | Piiratud nimeliste konstantide kogum | Piiratud tüüpide kogum |
| Andmed variantides | Ei (ainult omadused) | Jah (põhklasside kaudu) |
| Abstraktsed liikmed | Ei | Jah |
| Pärimine | Ei | Jah, aga ainult samas failis/modulis |