Sobes.tech
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