Junior
Quelle est la particularité de la Data Class par rapport aux autres classes en Kotlin?
sobes.tech IA
Réponse de l'IA
Caractéristiques de la Data Class en Kotlin :
- Génération automatique des fonctions
equals(),hashCode(),toString(),copy()etcomponentN(). - Nécessitent au moins un paramètre dans le constructeur.
- Tous les paramètres du constructeur doivent être déclarés comme
valouvar. - Conçues principalement pour stocker des données.
Exemple :
// Classe normale
class User(val name: String, val age: Int)
// Data Class
data class DataUser(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 30)
val user2 = User("Alice", 30)
println(user1 == user2) // false (compare les références par défaut)
println(user1.toString()) // Affichera quelque chose comme User@hashcode
val dataUser1 = DataUser("Alice", 30)
val dataUser2 = DataUser("Alice", 30)
println(dataUser1 == dataUser2) // true (compare les données)
println(dataUser1.toString()) // Affichera DataUser(name=Alice, age=30)
}
Différences dans les fonctions générées :
| Fonction | Classe normale | Data Class |
|---|---|---|
equals() |
Comparaison de références | Comparaison des données par champs |
hashCode() |
Dépend de l'implémentation | Dépend des données par champs |
toString() |
Nom de la classe et hash | Nom de la classe et valeurs des champs |
copy() |
Non (implémentation manuelle requise) | Oui (permet de créer facilement des copies) |
componentN() |
Non | Oui (permet de destructurer l'objet) |
Utilisation de componentN() :
// Définition d'une Data Class
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(10, 20)
val (x, y) = p // Destructuration avec component1(), component2()
println("x: $x, y: $y") // Affichera x: 10, y: 20
}