Kotlini andmeklass

Selles artiklis õpitakse Kotlinis andmeklasse looma. Samuti saate teada nõuete kohta, millele andmeklass peab vastama, ja nende standardsetest funktsioonidest.

Võib tekkida olukord, kus peate looma klassi ainult andmete hoidmiseks. Sellistel juhtudel saate märkida klassi andmeklassi dataloomiseks. Näiteks,

 andmeklass Isik (val nimi: string, varieeruvus: keskmine)

Selle klassi jaoks genereerib kompilaator automaatselt:

  • copy()Funktsiooni equals()ja hashCode()paari ning toString()vormis esmane konstruktori
  • componentN() funktsioone

Enne kui räägime neist funktsioonidest üksikasjalikult, räägime nõuetest, millele andmeklass peab vastama.

Kotlini andmeklassi nõuded

Siin on nõuded:

  • Primaarkonstruktoril peab olema vähemalt üks parameeter.
  • Esmase konstruktori parameetrid tuleb märkida kas val(kirjutuskaitstud) või var(kirjutus-kirjutus).
  • Klass ei saa olla avatud, abstraktne, sisemine ega kinnine.
  • Klass võib laiendada teisi klasse või rakendada liideseid. Kui kasutate Kotlini versiooni enne 1.1, saab klass rakendada ainult liideseid.

Näide: Kotlini andmeklass

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

Programmi käivitamisel on väljund järgmine:

 nimi = tungraua vanus = 29

Kui kuulutada andmebaasi klassi, koostaja genereerib automaatselt mitmeid funktsioone, nt toString(), equals(), hashcode()jne kulisside taga. See aitab teil koodi lühidalt hoida. Kui oleksite Java-d kasutanud, peaksite kirjutama palju katlakoodi.

Kasutame neid funktsioone:

Kopeerimine

Andmeklassi jaoks saate funktsiooni abil luua koopia objektist, millel on mõned selle omadused copy(). See töötab nii:

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

Programmi käivitamisel on väljund järgmine:

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

toString () meetod

Funktsioon toString () tagastab objekti stringi esituse.

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

Programmi käivitamisel on väljund järgmine:

 Kasutaja (nimi = John, vanus = 29)

hashCode () ja võrdub ()

hasCode()Meetod tagastab hash kood objekti. Kui kaks objekti on võrdsed, hashCode()annab sama täisarvu tulemuse. Soovitatav lugemine: hashCode ()

equals()Naaseb truekui kaks objekti on võrdsed (on sama hashCode()). Kui objektid pole võrdsed, equals()tagastatakse false. Soovitatav kirjand: võrdub ()

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

Programmi käivitamisel on väljund järgmine:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 on võrdne u2-ga. u1 ei ole võrdne u3-ga.

Ümberkorraldamisdeklaratsioonid

Destruktsioondeklaratsiooni abil saate objekti ümber struktureerida mitmeks muutujaks. Näiteks:

 andmeklassi kasutaja (val nimi: string, vanus: keskmine, so sugu: 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") )

Programmi käivitamisel on väljund järgmine:

 nimi = Johni vanus = 29 sugu = mees

See oli võimalik, sest kompilaator genereerib componentN()andmeklassi jaoks kõik funktsioonid. Näiteks:

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

Programmi käivitamisel on väljund järgmine:

 Johannese 29 Mees

Huvitavad Artiklid...