Sobes.tech
Junior

Mis on Data Class'i eripära võrreldes teiste klassidega Kotlinis?

sobes.tech AI

Vastus AI-lt

Kotlin Data klassi omadused:

  • Automaatne equals(), hashCode(), toString(), copy(), ja componentN() funktsioonide generatsioon.
  • Vajab vähemalt ühte parameetrit konstruktoris.
  • Kõik konstruktoriparameetrid peavad olema deklareeritud kui val või var.
  • Esiteks mõeldud andmete salvestamiseks.

Näide:

// Tavaline klass
class User(val name: String, val age: Int)

// Data Class
data class DataUser(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    println(user1 == user2) // false (võrdleb viiteid)
    println(user1.toString()) // Midagi sarnast User@hash-kood

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (võrdleb andmeid)
    println(dataUser1.toString()) // DataUser(name=Alice, age=30)
}

Erinevused genereeritud funktsioonides:

Funktsioon Tavaline klass Data Class
equals() Viidete võrdlus Andmete võrdlus väljade järgi
hashCode() Sõltub rakendusest Sõltub väljade andmetest
toString() Klassinimi ja hash-kood Klassinimi ja väljade väärtused
copy() Ei ole (vajab käsitsi) On (lubab hõlpsasti koopiaid teha)
componentN() Ei ole On (lubab objekti destruktureerida)

componentN() kasutamine:

data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // destruktureerimine component1(), component2() kasutades
    println("x: $x, y: $y") // Väljund: x: 10, y: 20
}