Middle
Kam naudojamos duomenų klasės ir sealed klasės Kotlin?
sobes.tech AI
Atsakymas iš AI
Duomenų klasės supaprastina tik duomenų saugojimui skirtų klasių kūrimą. Kompiliatorius automatiškai generuoja jiems:
equals()hashCode()toString()copy()componentN()destruktūrizacijai
data class User(val name: String, val age: Int)
// Naudojimas
val user = User("Alice", 30)
println(user) // Išveda User(name=Alice, age=30)
val user2 = user.copy(age = 31)
val (name, age) = user // Destruktūrizacija
Sealed klasės yra ribota klasių hierarchija, kurioje visi galimi pogrupiai yra žinomi kompiliavimo metu. Tai leidžia naudoti jas when išraiškose be else bloko, užtikrinant visų galimų variantų išsamų patikrinimą.
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result() // Objektas, nes neturi parametrų
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Sėkmė: ${result.data}")
is Result.Error -> println("Klaida: ${result.message}")
Result.Loading -> println("Įkeliama...")
}
}
Palyginimas:
| Bruožas | Duomenų klasė | Sealed klasė |
|---|---|---|
| Paskirtis | Duomenų saugojimas | Ribota klasių hierarchija |
| Galimybės | Automatinė metodų generacija | Visų galimų variantų išsamus patikrinimas |
| Pogrupiai | Nėra specifinio apribojimo | Turi būti apibrėžti toje pačioje byloje ar modulyje |
| Naudojimas | Duomenų modeliai, DTO | Būsenų, įvykių, variantų atvaizdavimas |