Classe de données Kotlin

Dans cet article, vous apprendrez à créer des classes de données dans Kotlin. Vous découvrirez également les exigences que la classe de données doit remplir et leurs fonctionnalités standard.

Il peut arriver que vous deviez créer une classe uniquement pour contenir des données. Dans de tels cas, vous pouvez marquer la classe comme datapour créer une classe de données. Par exemple,

 classe de données Person (val name: String, var age: Int)

Pour cette classe, le compilateur génère automatiquement:

  • copy()fonction, equals()et la hashCode()paire, et toString()forme du constructeur primaire
  • componentN() les fonctions

Avant de parler de ces fonctionnalités en détail, parlons des exigences qu'une classe de données doit remplir.

Exigences de la classe de données Kotlin

Voici les exigences:

  • Le constructeur principal doit avoir au moins un paramètre.
  • Les paramètres du constructeur principal doivent être marqués comme val(lecture seule) ou var(lecture-écriture).
  • La classe ne peut pas être ouverte, abstraite, intérieure ou scellée.
  • La classe peut étendre d'autres classes ou implémenter des interfaces. Si vous utilisez la version Kotlin antérieure à 1.1, la classe ne peut implémenter que des interfaces.

Exemple: classe de données Kotlin

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

Lorsque vous exécutez le programme, la sortie sera:

 nom = jack âge = 29

Lorsque vous déclarez une classe de données, le compilateur génère automatiquement plusieurs fonctions telles que toString(), equals(), hashcode()etc dans les coulisses. Cela permet de garder votre code concis. Si vous aviez utilisé Java, vous auriez besoin d'écrire beaucoup de code standard.

Utilisons ces fonctions:

Copier

Pour une classe de données, vous pouvez créer une copie d'un objet avec certaines de ses propriétés différentes à l'aide de copy()function. Voici comment cela fonctionne:

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

Lorsque vous exécutez le programme, la sortie sera:

 u1: nom = Jean, nom = 29 u2: nom = Randy, nom = 29

méthode toString ()

La fonction toString () renvoie une représentation sous forme de chaîne de l'objet.

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

Lorsque vous exécutez le programme, la sortie sera:

 Utilisateur (nom = Jean, âge = 29)

hashCode () et equals ()

La hasCode()méthode retourne le code de hachage pour l'objet. Si deux objets sont égaux, hashCode()produit le même résultat entier. Lecture recommandée: hashCode ()

Le equals()retourne truesi deux objets sont égaux (a le même hashCode()). Si les objets ne sont pas égaux, equals()renvoie false. Lecture recommandée: égale ()

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

Lorsque vous exécutez le programme, la sortie sera:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 est égal à u2. u1 n'est pas égal à u3.

Déclarations de destruction

Vous pouvez déstructurer un objet en un certain nombre de variables à l'aide d'une déclaration de destruction. Par exemple:

 classe de données User (nom de valeur: String, âge de valeur: Int, sexe de valeur: 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") )

Lorsque vous exécutez le programme, la sortie sera:

 name = John age = 29 gender = Male

Cela a été possible car le compilateur génère componentN()toutes les propriétés des fonctions d'une classe de données. Par exemple:

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

Lorsque vous exécutez le programme, la sortie sera:

 John 29 Homme

Articles intéressants...