Kotlinov podatkovni razred

V tem članku se boste naučili ustvarjati podatkovne razrede v Kotlinu. Spoznali boste tudi zahteve, ki jih mora izpolnjevati podatkovni razred, in njihove standardne funkcije.

Lahko pride do situacije, ko morate ustvariti razred samo za hrambo podatkov. V takih primerih lahko razred označite kot dataustvarjanje podatkovnega razreda. Na primer

 podatkovni razred Oseba (ime valu: Niz, spremenljivka: Int)

Za ta razred prevajalnik samodejno ustvari:

  • copy()funkcija, equals()in hashCode()par, in toString()obliko primarnega konstruktorja
  • componentN() funkcije

Preden se podrobno pogovorimo o teh funkcijah, se pogovorimo o zahtevah, ki jih mora izpolnjevati podatkovni razred.

Zahteve glede podatkovnega razreda Kotlin

Tu so zahteve:

  • Primarni konstruktor mora imeti vsaj en parameter.
  • Parametri primarnega konstruktorja morajo biti označeni kot val(samo za branje) ali var(branje in pisanje).
  • Predavanja ne morejo biti odprta, abstraktna, notranja ali zapečatena.
  • Razred lahko razširja druge razrede ali izvaja vmesnike. Če uporabljate različico Kotlin pred 1.1, lahko razred izvaja samo vmesnike.

Primer: Kotlinov podatkovni razred

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

Ko zaženete program, bo rezultat:

 ime = starost jacka = 29

Ko razglasite podatkovni razred, prevajalnik samodejno ustvari več funkcij, kot toString()so equals(), hashcode()itd. To vam pomaga ohranjati jedrnato kodo. Če bi uporabljali Javo, bi morali napisati veliko vzorčne kode.

Uporabimo te funkcije:

Kopiranje

Za podatkovni razred lahko s copy()funkcijo ustvarite kopijo predmeta z nekaterimi lastnostmi, ki se razlikujejo . Tako deluje:

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

Ko zaženete program, bo rezultat:

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

metoda toString ()

Funkcija toString () vrne nizovno predstavitev predmeta.

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

Ko zaženete program, bo rezultat:

 Uporabnik (ime = John, starost = 29)

hashCode () in enako ()

hasCode()Metoda vrne hash koda za objekt. Če sta dva predmeta enaka, hashCode()dobimo enak celoštevilski rezultat. Priporočeno branje: hashCode ()

Se equals()vrne trueče dveh objektov so enaki (je enako hashCode()). Če predmeti niso enaki, se equals()vrne false. Priporočeno branje: enako ()

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

Ko zaženete program, bo rezultat:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 je enako u2. u1 ni enako u3.

Izjave o destrukturiranju

Predmet lahko destrukturirate v številne spremenljivke z uporabo destruktivne deklaracije. Na primer:

 podatkovni razred Uporabnik (ime valu: String, val starost: Int, val spol: niz) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )

Ko zaženete program, bo rezultat:

 ime = John starost = 29 spol = moški

To je bilo mogoče, ker prevajalnik ustvari componentN()funkcije vseh lastnosti za podatkovni razred. Na primer:

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

Ko zaženete program, bo rezultat:

 Janez 29 Moški

Zanimive Članki...