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 data
loomiseks. Näiteks,
andmeklass Isik (val nimi: string, varieeruvus: keskmine)
Selle klassi jaoks genereerib kompilaator automaatselt:
copy()
Funktsiooniequals()
jahashCode()
paari ningtoString()
vormis esmane konstruktoricomponentN()
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õivar
(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 true
kui 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