Kotlin-gegevensklasse

In dit artikel leer je dataklassen maken in Kotlin. Je leert ook over vereisten waaraan dataklassen moeten voldoen, en hun standaardfunctionaliteiten.

Er kan een situatie ontstaan ​​waarin u een klasse moet maken die alleen gegevens bevat. In dergelijke gevallen kunt u de klasse markeren dataom een ​​dataklasse te maken. Bijvoorbeeld,

 dataklasse Persoon (val name: String, var age: Int)

Voor deze klasse genereert de compiler automatisch:

  • copy()functie equals()en hashCode()paar, en toString()vorm van de primaire constructor
  • componentN() functies

Voordat we in detail over deze functies ingaan, laten we het hebben over de vereisten waaraan een dataklasse moet voldoen.

Vereisten voor Kotlin-gegevensklassen

Hier zijn de vereisten:

  • De primaire constructor moet ten minste één parameter hebben.
  • De parameters van de primaire constructor moeten worden gemarkeerd als val(alleen-lezen) of var(lezen-schrijven).
  • De klas kan niet open, abstract, innerlijk of verzegeld zijn.
  • De klasse kan andere klassen uitbreiden of interfaces implementeren. Als je Kotlin-versie vóór 1.1 gebruikt, kan de klasse alleen interfaces implementeren.

Voorbeeld: Kotlin Data Class

 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)") )

Wanneer u het programma uitvoert, is de uitvoer:

 naam = jack leeftijd = 29

Wanneer u een data-klasse te verklaren, de compiler genereert automatisch verschillende functies zoals toString(), equals(), hashcode()etc achter de schermen. Dit helpt om uw code beknopt te houden. Als je Java had gebruikt, zou je veel standaardcode moeten schrijven.

Laten we deze functies gebruiken:

Kopiëren

Voor een dataklasse kunt u een kopie van een object maken met een aantal eigenschappen die anders zijn met behulp van de copy()functie. Dit is hoe het werkt:

 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)") )

Wanneer u het programma uitvoert, is de uitvoer:

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

toString () methode

De functie toString () retourneert een tekenreeksweergave van het object.

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )

Wanneer u het programma uitvoert, is de uitvoer:

 Gebruiker (naam = Jan, leeftijd = 29)

hashCode () en is gelijk aan ()

De hasCode()methode retourneert hash-code voor het object. Als twee objecten gelijk zijn, hashCode()levert dit hetzelfde gehele resultaat op. Aanbevolen literatuur: hashCode ()

Het equals()resultaat trueals twee objecten gelijk zijn (heeft hetzelfde hashCode()). Als objecten niet gelijk zijn, wordt equals()geretourneerd false. Aanbevolen literatuur: gelijk aan ()

 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.") )

Wanneer u het programma uitvoert, is de uitvoer:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 is gelijk aan u2. u1 is niet gelijk aan u3.

Verklaringen betreffende vernietiging

U kunt een object in een aantal variabelen vernietigen met behulp van een vernietigende declaratie. Bijvoorbeeld:

 dataklasse Gebruiker (val naam: String, val leeftijd: Int, val geslacht: 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") )

Wanneer u het programma uitvoert, is de uitvoer:

 naam = John leeftijd = 29 geslacht = Man

Dit was mogelijk omdat de compiler componentN()functies genereert alle eigenschappen voor een dataklasse. Bijvoorbeeld:

 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" )

Wanneer u het programma uitvoert, is de uitvoer:

 John 29 Man

Interessante artikelen...