Kotlin Sealed Classes and Enums

Sealed classes restrict class hierarchies — the compiler knows all possible subtypes, enabling exhaustive when expressions.

Sealed Classes

Kotlin
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

fun handleResult(result: Result) = when (result) {
    is Result.Success -> "Data: ${result.data}"
    is Result.Error   -> "Error: ${result.message}"
    is Result.Loading -> "Loading..."
}

Enums

Kotlin
enum class Direction {
    NORTH, SOUTH, EAST, WEST
}

enum class Color(val hex: String) {
    RED("#FF0000"),
    GREEN("#00FF00"),
    BLUE("#0000FF")
}

Sealed Interfaces (Kotlin 1.5+)

Kotlin
sealed interface Shape {
    data class Circle(val radius: Double) : Shape
    data class Rectangle(val w: Double, val h: Double) : Shape
}

fun area(shape: Shape) = when (shape) {
    is Shape.Circle    -> Math.PI * shape.radius * shape.radius
    is Shape.Rectangle -> shape.w * shape.h
}

Tips

  • Use sealed classes for restricted hierarchies (enums with data).
  • The compiler enforces exhaustive when — no missed cases.
  • Use data class variants for sealed class subtypes.

🎉 You have completed the Kotlin course!