Kotlin-dataklasse

I denne artikel lærer du at oprette dataklasser i Kotlin. Du vil også lære om krav, som dataklassen skal opfylde, og deres standardfunktioner.

Der kan opstå en situation, hvor du kun skal oprette en klasse for at holde data. I sådanne tilfælde kan du markere klassen for dataat oprette en dataklasse. For eksempel,

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

For denne klasse genererer compileren automatisk:

  • copy()funktion equals()og hashCode()par og toString()form af den primære konstruktør
  • componentN() funktioner

Før vi taler om disse funktioner i detaljer, lad os tale om krav, som en dataklasse skal opfylde.

Kotlin-dataklassekrav

Her er kravene:

  • Den primære konstruktør skal have mindst en parameter.
  • Parametrene for den primære konstruktør skal markeres som enten val(skrivebeskyttet) eller var(læse-skriv).
  • Klassen kan ikke være åben, abstrakt, indre eller forseglet.
  • Klassen kan udvide andre klasser eller implementere grænseflader. Hvis du bruger Kotlin-version før 1.1, kan klassen kun implementere grænseflader.

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 kører programmet, vil output være:

 navn = jack alder = 29

Når du erklærer en data klasse, compileren genererer automatisk flere funktioner såsom toString(), equals(), hashcode()etc bag kulisserne. Dette hjælper med at holde din kode kortfattet. Hvis du havde brugt Java, skal du skrive en masse kedelpladekode.

Lad os bruge disse funktioner:

Kopiering

For en dataklasse kan du oprette en kopi af et objekt med nogle af dets egenskaber forskellige ved hjælp af copy()funktionen. Sådan 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 kører programmet, vil output være:

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

toString () metode

Funktionen toString () returnerer en strengrepræsentation af 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 kører programmet, vil output være:

 Bruger (navn = John, alder = 29)

hashCode () og er lig med ()

Den hasCode()returnerer fremgangsmåden hashkode for objektet. Hvis to objekter er ens, hashCode()producerer det samme heltalresultat. Anbefalet læsning: hashCode ()

De equals()vender tilbage true, hvis to objekter er ens (har samme hashCode()). Hvis objekter ikke er ens, equals()vender tilbage false. Anbefalet læsning: er lig med ()

 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 kører programmet, vil output være:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 er lig med u2. u1 er ikke lig med u3.

Erklæringer om destruktion

Du kan destruere et objekt i et antal variabler ved hjælp af destruktionserklæring. For eksempel:

 dataklasse bruger (val navn: streng, val alder: int, val køn: 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 kører programmet, vil output være:

 navn = John alder = 29 køn = mand

Dette var muligt, fordi compileren genererer componentN()funktioner alle egenskaber 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 kører programmet, vil output være:

 Johannes 29 Mand

Interessante artikler...