Razred podataka Kotlin

U ovom ćete članku naučiti stvoriti klase podataka u Kotlinu. Također ćete naučiti o zahtjevima koje klasa podataka mora ispunjavati i njihovim standardnim funkcionalnostima.

Može doći do situacije da klasu trebate stvoriti isključivo za čuvanje podataka. U takvim slučajevima možete označiti klasu kao datada stvara klasu podataka. Na primjer,

 podatkovna klasa Osoba (val ime: Niz, varijabla: Int)

Za ovu klasu, kompajler automatski generira:

  • copy()funkcija equals()i hashCode()par i toString()oblik primarnog konstruktora
  • componentN() funkcije

Prije nego što detaljno razgovaramo o ovim značajkama, razgovarajmo o zahtjevima koje klasa podataka mora ispunjavati.

Zahtjevi za razred podataka Kotlin

Evo zahtjeva:

  • Primarni konstruktor mora imati barem jedan parametar.
  • Parametri primarnog konstruktora moraju biti označeni kao val(samo za čitanje) ili var(za čitanje i pisanje).
  • Predavanje ne može biti otvoreno, apstraktno, unutarnje ili zatvoreno.
  • Klasa može proširiti druge klase ili implementirati sučelja. Ako koristite verziju Kotlin prije 1.1, klasa može implementirati samo sučelja.

Primjer: Kotlin Data Class

 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)") )

Kada pokrenete program, izlaz će biti:

 ime = dob jacka = 29

Kada proglasiti klasu podataka, prevodilac automatski generira nekoliko funkcija, kao što su toString(), equals(), hashcode()i sl iza scene. To vam pomaže održati sažeti kod. Da ste koristili Javu, trebali biste napisati puno standardnih kodova.

Koristimo ove funkcije:

Kopiranje

Za podatkovnu klasu možete stvoriti kopiju objekta s nekim od njegovih svojstava koja se razlikuju pomoću copy()funkcije. Evo kako to funkcionira:

 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)") )

Kada pokrenete program, izlaz će biti:

 u1: ime = John, ime = 29 u2: ime = Randy, ime = 29

metoda toString ()

Funkcija toString () vraća predstavljanje objekta u nizu.

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

Kada pokrenete program, izlaz će biti:

 Korisnik (ime = John, dob = 29)

hashCode () i jednako ()

hasCode()Metoda vraća hash broj za objekt. Ako su dva objekta jednaka, hashCode()daje se isti cijeli broj. Preporučena literatura: hashCode ()

U equals()vraća trueako dva objekta jednaka (ima isti hashCode()). Ako objekti nisu jednaki, equals()vraća se false. Preporučena literatura: jednako ()

 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.") )

Kada pokrenete program, izlaz će biti:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 je jednak u2. u1 nije jednako u3.

Deklaracije o destrukturiranju

Objekt možete destrukturirati u brojne varijable pomoću destruktivne deklaracije. Na primjer:

 podatkovna klasa Korisnik (val ime: String, val dob: Int, val spol: 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") )

Kada pokrenete program, izlaz će biti:

 ime = Ivan dob = 29 spol = muško

To je bilo moguće jer prevoditelj generira componentN()funkcije sva svojstva za klasu podataka. Na primjer:

 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" )

Kada pokrenete program, izlaz će biti:

 Ivan 29 muški

Zanimljivi članci...