Sobes.tech
Junior — Middle

Quelle est la différence entre l'utilisation d'une sealed class et d'un enum en ce qui concerne leurs constructeurs et leur capacité à être créés?

sobes.tech IA

Réponse de l'IA

Enum en Kotlin (et Java) représente un ensemble de constantes fixes. Chaque enum a un ensemble limité d’instances, défini dans la déclaration elle-même. Les constructeurs d’enum sont toujours privés, et il n’est pas possible de créer de nouvelles instances — seulement celles qui sont déclarées.

La classe scellée (Sealed class) est une classe abstraite avec un ensemble limité de sous-classes, déclarées dans le même fichier. Contrairement à l’enum, la classe scellée permet de créer différents types avec des structures et des états variés. Les constructeurs de la classe scellée peuvent être ouverts ou fermés, et il est possible de créer de nouvelles instances de sous-classes, pas seulement des constantes fixes.

Exemple :

// Enum avec constructeur privé et instances fixes
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Classe scellée avec différentes sous-classes et constructeurs
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

val res: Result = Result.Success("OK")

Ainsi, l’enum est limité à un ensemble fixe d’instances avec un constructeur privé, la classe scellée étant plus flexible, permettant de créer différentes sous-classes avec leurs propres constructeurs et états.