„Kotlin“ duomenų klasė

Šiame straipsnyje jūs išmoksite kurti duomenų klases Kotlin. Taip pat sužinosite apie reikalavimus, kuriuos turi atitikti duomenų klasė, ir jų standartines funkcijas.

Gali kilti situacija, kai kuriant klasę reikia laikyti tik duomenis. Tokiais atvejais galite pažymėti klasę kaip datasukurti duomenų klasę. Pavyzdžiui,

 duomenų klasė Asmuo (vardas, pavardė: eilutė, įvairus amžius: vidutinis)

Šiai klasei kompiliatorius automatiškai sugeneruoja:

  • copy()funkcija, equals()ir hashCode()pora, ir toString()forma pirminės konstruktoriaus
  • componentN() funkcijos

Prieš išsamiai kalbėdami apie šias funkcijas, pakalbėkime apie reikalavimus, kuriuos turi atitikti duomenų klasė.

„Kotlin“ duomenų klasės reikalavimai

Čia yra reikalavimai:

  • Pirminis konstruktorius turi turėti bent vieną parametrą.
  • Pirminio konstruktoriaus parametrai turi būti pažymėti kaip val(tik skaityti) arba var(skaityti-rašyti).
  • Klasė negali būti atvira, abstrakti, vidinė ar antspauduota.
  • Klasė gali išplėsti kitas klases arba įdiegti sąsajas. Jei naudojate „Kotlin“ versiją iki 1.1, klasė gali įdiegti tik sąsajas.

Pavyzdys: „Kotlin“ duomenų klasė

 data class User(val name: String, val age: Int) fun main(args: Array) ( val jack = User("jack", 29) println("name = $(jack.name)") println("age = $(jack.age)") )

Kai paleisite programą, išvestis bus:

 vardas = jack amžius = 29

Kai deklaruojate duomenų klasę, kompiliatorius užkulisiuose automatiškai sukuria keletą funkcijų, tokių kaip toString(), equals()ir hashcode()tt. Tai padeda išlaikyti kodą glaustą. Jei būtumėte naudoję „Java“, turėtumėte parašyti daug katilo kodo.

Panaudokime šias funkcijas:

Kopijavimas

Duomenų klasei galite sukurti objekto kopiją su skirtingomis jo savybėmis, naudodami copy()funkciją. Štai kaip tai veikia:

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) // using copy function to create an object val u2 = u1.copy(name = "Randy") println("u1: name = $(u1.name), name = $(u1.age)") println("u2: name = $(u2.name), name = $(u2.age)") )

Kai paleisite programą, išvestis bus:

 u1: vardas = Jonas, vardas = 29 u2: vardas = Randy, vardas = 29

toString () metodas

Funkcija toString () pateikia eilutės objekto vaizdą.

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )

Kai paleisite programą, išvestis bus:

 Vartotojas (vardas = Jonas, amžius = 29)

hashCode () ir lygu ()

hasCode()Metodas grįžta maišos kodas objektą. Jei du objektai yra lygūs, hashCode()gaunamas tas pats sveikasis skaičius. Rekomenduojamas skaitymas: hashCode ()

Kad equals()grįžta truejei dviejų objektų yra lygūs (turi tą pačią hashCode()). Jei objektai nėra lygūs, equals()grąžinama false. Rekomenduojamas skaitymas: lygu ()

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) val u2 = u1.copy() val u3 = u1.copy(name = "Amanda") println("u1 hashcode = $(u1.hashCode())") println("u2 hashcode = $(u2.hashCode())") println("u3 hashcode = $(u3.hashCode())") if (u1.equals(u2) == true) println("u1 is equal to u2.") else println("u1 is not equal to u2.") if (u1.equals(u3) == true) println("u1 is equal to u3.") else println("u1 is not equal to u3.") )

Kai paleisite programą, išvestis bus:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 yra lygus u2. u1 nėra lygus u3.

Pertvarkymo deklaracijos

Naudodami naikinančią deklaraciją, galite suskaidyti objektą į keletą kintamųjų. Pavyzdžiui:

 duomenų klasė Vartotojas (val vardas: eilutė, val amžius: Vid, val lytis: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )

Kai paleisite programą, išvestis bus:

 vardas = Jono amžius = 29 lytis = vyras

Tai buvo įmanoma, nes kompiliatorius sugeneruoja componentN()visas duomenų klasės ypatybes. Pavyzdžiui:

 data class User(val name: String, val age: Int, val gender: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") println(u1.component1()) // John println(u1.component2()) // 29 println(u1.component3()) // "Male" )

Kai paleisite programą, išvestis bus:

 Jonas 29 Vyras

Įdomios straipsniai...