Kotlin-dataklass

I den här artikeln lär du dig att skapa dataklasser i Kotlin. Du lär dig också om krav som dataklassen måste uppfylla och deras standardfunktioner.

Det kan uppstå en situation där du behöver skapa en klass enbart för att hålla data. I sådana fall kan du markera klassen för dataatt skapa en dataklass. Till exempel,

 dataklass Person (val namn: Sträng, var ålder: Int)

För denna klass genererar kompilatorn automatiskt:

  • copy()funktion, equals()och hashCode()par, och toString()form av den primära konstruktören
  • componentN() funktioner

Innan vi pratar om dessa funktioner i detalj, låt oss prata om krav som en dataklass måste uppfylla.

Kotlin Krav på dataklass

Här är kraven:

  • Primärkonstruktören måste ha minst en parameter.
  • Parametrarna för den primära konstruktören måste markeras som antingen val(skrivskyddad) eller var(skriv-skriv).
  • Klassen kan inte vara öppen, abstrakt, inre eller förseglad.
  • Klassen kan utöka andra klasser eller implementera gränssnitt. Om du använder Kotlin-versionen före 1.1 kan klassen bara implementera gränssnitt.

Exempel: Kotlin-dataklass

 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ör programmet blir resultatet:

 namn = jack ålder = 29

När du deklarerar ett data klass genererar kompilatorn automatiskt flera funktioner såsom toString(), equals(), hashcode()etc bakom kulisserna. Detta hjälper dig att hålla din kod kortfattad. Hade du använt Java skulle du behöva skriva en hel del pannkodskod.

Låt oss använda dessa funktioner:

Kopiering

För en dataklass kan du skapa en kopia av ett objekt med vissa av dess egenskaper olika med hjälp av copy()funktionen. Så här fungerar 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ör programmet blir resultatet:

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

toString () -metod

Funktionen toString () returnerar en strängrepresentation 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 kör programmet blir resultatet:

 Användare (namn = John, ålder = 29)

hashCode () och är lika med ()

Den hasCode()metoden returnerar hash-kod för objektet. Om två objekt är lika hashCode()producerar samma heltalresultat. Rekommenderad läsning: hashCode ()

De equals()återgår trueOm två objekt är lika (har samma hashCode()). Om objekt inte är lika, equals()returnerar false. Rekommenderad läsning: är lika 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ör programmet blir resultatet:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 är lika med u2. u1 är inte lika med u3.

Förstöringsdeklarationer

Du kan förstöra ett objekt i ett antal variabler med hjälp av destruktionsdeklaration. Till exempel:

 dataklass Användare (val namn: String, val age: Int, val kön: 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") )

När du kör programmet blir resultatet:

 namn = John ålder = 29 kön = Man

Detta var möjligt eftersom kompilatorn genererar componentN()funktioner alla egenskaper för en dataklass. Till exempel:

 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ör programmet blir resultatet:

 Johannes 29 Man

Intressanta artiklar...