Middle
Milleks kasutatakse andmeklasse ja sealed klasse Kotlinis?
sobes.tech AI
Vastus AI-lt
Andmeklassid lihtsustavad ainult andmete salvestamiseks mõeldud klasside loomist. Kompilaator genereerib neile automaatselt:
equals()hashCode()toString()copy()componentN()destruktureerimiseks
data class User(val name: String, val age: Int)
// Kasutamine
val user = User("Alice", 30)
println(user) // Näitab User(name=Alice, age=30)
val user2 = user.copy(age = 31)
val (name, age) = user // Destruktureerimine
Sealed-klassid on piiratud klasside hierarhia, kus kõik võimalikud alamklassid on teada kompilatsiooni ajal. See võimaldab neid kasutada when-lausekestes ilma else-blokita, tagades kõigi võimalike variantide täieliku kontrolli.
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result() // Objekt, kuna pole parameetreid
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Edu: ${result.data}")
is Result.Error -> println("Viga: ${result.message}")
Result.Loading -> println("Laadimine...")
}
}
Võrdlus:
| Omadus | Andmeklass | Sealed-klass |
|---|---|---|
| Otstarve | Andmete salvestamine | Piiratud klasside hierarhia |
| Võimalused | Automaatne meetodite genereerimine | Täielik kontroll when-lausekestes |
| Alamklassid | Spetsiifiline piirang puudub | Peab olema määratletud samas failis või moodulis |
| Kasutamine | Andmemudelid, DTO-d | Seisundite, sündmuste, variantide esitlus |