Middle
Qu'est-ce que les classes scellées et quel est leur but?
sobes.tech IA
Réponse de l'IA
Les classes scellées représentent des hiérarchies de classes limitées. Elles sont utilisées pour représenter un ensemble restreint d'états ou de valeurs possibles.
Principales caractéristiques et objectifs :
- Hiérarchie limitée : Les descendants d'une classe scellée doivent être déclarés dans le même fichier ou imbriqués à l'intérieur de la classe scellée avant Kotlin 1.5. Depuis la version 1.5, cette restriction est assouplie : les descendants peuvent être dans n'importe quel fichier du même paquet.
- Classes enum avec état : Contrairement aux classes enum, chaque descendant d'une classe scellée peut avoir son propre état et comportement.
whenexhaustif : Le compilateur garantit que le blocwhenpour une instance de classe scellée est exhaustif (tous les cas sont couverts), si aucune brancheelsen'est spécifiée. Cela réduit la probabilité d'erreurs à l'exécution.
Exemple :
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>() // Instance unique
}
fun processResult(result: Result<String>) {
when (result) {
is Result.Success -> {
// Traitement du résultat réussi
println("Data: ${result.data}")
}
is Result.Error -> {
// Traitement de l'erreur
println("Error: ${result.exception.message}")
}
Result.Loading -> {
// Traitement de l'état de chargement
println("Loading data...")
}
// La branche else n'est pas nécessaire, car toutes les sous-classes
// de Result sont traitées par le compilateur
}
}
Objectif :
- Représentation sûre des états : Représenter de manière fiable un nombre fini d'états possibles, par exemple, le résultat d'une requête réseau (
Success,Error,Loading). - Amélioration de la lisibilité du code : Rendre le code plus explicite lors du traitement de différents cas.
- Augmentation de la fiabilité des expressions
when: Le compilateur aide à éviter les cas non traités. - Remplacement des classes enum avec état : Lorsqu'il est nécessaire de lier des données à des "variantes" spécifiques d'un énuméré.
Ainsi, les classes scellées offrent une méthode flexible pour modéliser des ensembles finis de valeurs avec la possibilité de stocker des données spécifiques pour chaque valeur, tout en assurant sécurité et clarté lors du traitement de ces valeurs dans des expressions when.