Sobes.tech
Middle

Kam paredzētas datu klases un sealed klases Kotlin?

sobes.tech AI

Atbilde no AI

Datu klases atvieglo tikai datu glabāšanai paredzētu klases izveidi. Kompilators automātiski ģenerē tām:

  • equals()
  • hashCode()
  • toString()
  • copy()
  • componentN() destrukturizācijai
data class User(val name: String, val age: Int)

// Lietošana
val user = User("Alice", 30)
println(user) // Izvada User(name=Alice, age=30)
val user2 = user.copy(age = 31)
val (name, age) = user // Destrukturizācija

Sealed klases ir ierobežota klases hierarhija, kurā visi iespējamie apakšklases ir zināmas kompilācijas laikā. Tas ļauj tās izmantot when izteiksmēs bez else bloka, nodrošinot visu iespējamās variācijas pilnu pārbaudi.

sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result() // Objekts, jo tam nav parametru
}

fun handleResult(result: Result) {
    when (result) {
        is Result.Success -> println("Veiksme: ${result.data}")
        is Result.Error -> println("Kļūda: ${result.message}")
        Result.Loading -> println("Ielādē...")
    }
}

Salīdzinājums:

Raksturlielums Datu klase Sealed klase
Mērķis Datu glabāšana Ierobežota klases hierarhija
Iespējas Automātiska metožu ģenerēšana Pilna pārbaude when izteiksmēs
Apakšklases Nav specifiska ierobežojuma Tās jādefinē tajā pašā failā vai modulī
Lietošana Datu modeļi, DTO Stāvokļu, notikumu, variāciju attēlojums