Parlez-moi des classes de données et des classes scellées en Kotlin.
sobes.tech IA
Réponse de l'IA
Les classes de données en Kotlin sont utilisées pour stocker des données. Elles génèrent automatiquement des méthodes utiles telles que equals(), hashCode(), toString(), copy(), ainsi que des composants pour la destructuration.
// Exemple de classe de données
data class User(val name: String, val age: Int)
Les classes scellées sont utilisées pour représenter une hiérarchie limitée de classes. Toutes les sous-classes doivent être définies dans le même fichier que la classe scellée (dans Kotlin 1.5+ cette restriction a été assouplie). Cela permet au compilateur de s'assurer d'une exhaustivité dans la vérification des sous-classes, par exemple dans une expression when.
// Exemple de classe scellée
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
// Exemple d'utilisation de la classe scellée dans une expression when
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Succès : ${result.data}")
is Result.Error -> println("Erreur : ${result.message}")
Result.Loading -> println("Chargement...")
}
}
Principales différences :
- But : classes de données - stockage de données, classes scellées - restriction de la hiérarchie des classes.
- Méthodes générées : classes de données génèrent des méthodes standard pour les données, classes scellées - non.
- Restriction des sous-classes : classes scellées imposent des restrictions sur la déclaration des sous-classes, classes de données - non.
- Exhaustivité dans
when: le compilateur Kotlin peut vérifier l'exhaustivité des sous-classes d'une classe scellée danswhensans brancheelse.
Les classes scellées et les classes de données peuvent être abstraites, mais les classes de données ne peuvent pas être open (car elles sont final par défaut) et ne peuvent pas implémenter directement des méthodes open (seulement via des interfaces ou des classes abstraites). Les classes scellées sont, par défaut, abstraites, et leurs constructeurs sont privés.