Kotlin-dataklasse

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 dataat den oppretter en dataklasse. For eksempel,

 dataklasse Person (val navn: Streng, var alder: Int)

For denne klassen genererer kompilatoren automatisk:

  • copy()funksjon, equals()og hashCode()par, og toString()form til den primære konstruktøren
  • componentN() 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) eller var(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 truehvis 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

Interessante artikler...