Sobes.tech
Junior

Kaip veikia duomenų klasės Kotlin?

sobes.tech AI

Atsakymas iš AI

Kotlin duomenų klasės naudojamos duomenų saugojimui. Konstruktorius automatiškai sugeneruoja standartinius metodus:

  • equals(): Palygina objektus pagal jų savybių reikšmes.
  • hashCode(): Sugeneruoja hash kodą pagal savybių reikšmes.
  • toString(): Grąžina eilutės vaizdą, įtraukiantį visų savybių pavadinimus ir reikšmes.
  • copy(): Sukuria objekto kopiją, jei reikia, keisdama nurodytų savybių reikšmes.
  • componentN(): metodai objektų destruktūrizacijai (objekto išardymui į atskiras savybes).
// Duomenų klasės pavyzdys
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    val user3 = User("Bob", 25)

    // equals()
    println(user1 == user2) // tiesa
    println(user1 == user3) // klaidinga

    // toString()
    println(user1.toString()) // User(name=Alice, age=30)

    // copy()
    val user4 = user1.copy(age = 31)
    println(user4) // User(name=Alice, age=31)

    // componentN() ir destruktūrizacija
    val (name, age) = user1
    println("Name: $name, Age: $age") // Name: Alice, Age: 30
}

Svarbūs punktai:

  • Visos savybės, apibrėžtos pagrindiniame konstruktoriuje, turi būti val arba var.
  • Duomenų klasė negali būti abstract, open, sealed arba inner.
  • Duomenų klasės gali paveldėti kitas klases arba įgyvendinti sąsajas.
  • Savybės, deklaruotos už pagrindinio konstruktoriaus ribų, nedalyvauja standartinių metodų generavime.
Metodas Aprašymas
equals() Palygina savybes iš pagrindinio konstruktoriaus.
hashCode() Sugeneruoja hash pagal savybes iš pagrindinio konstruktoriaus.
toString() Išveda eilutės vaizdą su savybėmis iš pagrindinio konstruktoriaus.
copy() Sukuria paviršutinę kopiją su galimybe keisti savybes.
componentN() Prieiga prie savybių pagal jų eilės numerį konstruktoriuje.

Duomenų klasės žymiai palengvina darbą su POJO (Plain Old Java Object) arba DTO (Data Transfer Object), sumažindamos boilerplate kodą.