Sobes.tech
Middle

Connais-tu les classes scellées et quelle est leur particularité?

sobes.tech IA

Réponse de l'IA

Oui, je connais.

La particularité des classes sealed est qu'elles permettent de limiter la hiérarchie d'héritage. Tous les sous-types directs d'une classe sealed doivent être déclarés dans le même fichier. Cela garantit que le compilateur connaît tous les sous-types possibles, ce qui est utile pour vérifier l'exhaustivité dans les expressions when.

Exemple:

sealed class Result {
    data class Success(val message: String) : Result()
    data class Error(val code: Int, val description: String) : Result()
    object Loading : Result() // Singleton pour l'état de chargement
}

fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Succès: ${result.message}")
        is Result.Error -> println("Erreur ${result.code}: ${result.description}")
        Result.Loading -> println("Chargement...")
        // Pas besoin d'un else, car le compilateur connaît toutes les options
    }
}

Avantages:

  • Sécurité: Garantie d'exhaustivité des expressions when sans besoin de else.
  • Lisibilité: Indique clairement un ensemble limité d'états ou de sous-types possibles.
  • Contrôle: Empêche l'héritage non contrôlé depuis l'extérieur.

Différence avec enum class: Les classes sealed peuvent avoir différents types de données pour chaque sous-type (comme Success et Error dans l'exemple), tandis que les éléments de enum class sont statiques et ne peuvent avoir que des propriétés définies, communes à tous. Les classes sealed peuvent également avoir des instances-objets (Loading).