I denne artikkelen vil du lære å lage dataklasser i Kotlin. Du vil også lære om krav som dataklasse må oppfylle, og deres standardfunksjonalitet.
Det kan oppstå en situasjon der du trenger å opprette en klasse bare for å holde data. I slike tilfeller kan du merke klassen slik data
at den oppretter en dataklasse. For eksempel,
dataklasse Person (val navn: Streng, var alder: Int)
For denne klassen genererer kompilatoren automatisk:
copy()
funksjon,equals()
oghashCode()
par, ogtoString()
form til den primære konstruktørencomponentN()
funksjoner
Før vi snakker om disse funksjonene i detalj, la oss snakke om krav som en dataklasse må oppfylle.
Kotlin dataklassekrav
Her er kravene:
- Primærkonstruktøren må ha minst én parameter.
- Parametrene til den primære konstruktøren må merkes som enten
val
(skrivebeskyttet) ellervar
(lese-skrive). - Klassen kan ikke være åpen, abstrakt, indre eller forseglet.
- Klassen kan utvide andre klasser eller implementere grensesnitt. Hvis du bruker Kotlin-versjonen før 1.1, kan klassen bare implementere grensesnitt.
Eksempel: Kotlin-dataklasse
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)") )
Når du kjører programmet, vil utdataene være:
navn = jack alder = 29
Når du deklarerer en data klasse, genererer kompilatoren automatisk flere funksjoner som toString()
, equals()
, hashcode()
etc bak kulissene. Dette hjelper deg med å holde deg kortfattet. Hadde du brukt Java, trenger du å skrive mye kokerplatekode.
La oss bruke disse funksjonene:
Kopiering
For en dataklasse kan du lage en kopi av et objekt med noen av dets egenskaper forskjellige ved hjelp av copy()
funksjonen. Slik fungerer det:
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)") )
Når du kjører programmet, vil utdataene være:
u1: navn = John, navn = 29 u2: navn = Randy, navn = 29
toString () -metoden
Funksjonen toString () returnerer en strengrepresentasjon av objektet.
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )
Når du kjører programmet, vil utdataene være:
Bruker (navn = John, alder = 29)
hashCode () og er lik ()
Den hasCode()
metoden returnerer hash-koden for objektet. Hvis to objekter er like, hashCode()
produserer det samme heltalsresultatet. Anbefalt lesing: hashCode ()
De equals()
returnerer true
hvis to objekter er lik (har samme hashCode()
). Hvis objekter ikke er like, equals()
returnerer false
. Anbefalt lesing: er lik ()
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.") )
Når du kjører programmet, vil utdataene være:
u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 er lik u2. u1 er ikke lik u3.
Destruksjonserklæringer
Du kan ødelegge et objekt i en rekke variabler ved hjelp av destruksjonserklæring. For eksempel:
dataklasse bruker (val navn: streng, val alder: int, val kjønn: streng) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )
Når du kjører programmet, vil utdataene være:
navn = John alder = 29 kjønn = Mann
Dette var mulig fordi kompilatoren genererer componentN()
funksjoner alle egenskaper for en dataklasse. For eksempel:
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" )
Når du kjører programmet, vil utdataene være:
Johannes 29 Mann