0Pricing
Kotlin Academy · Lesson

Nesting and Combining Sealed Hierarchies

Build complex state machines by nesting sealed types.

Composing State Trees

Real-world state often has multiple dimensions. Nest sealed types or combine separate hierarchies to model complex domains cleanly.

Nested Sealed Class

Declare child sealed types inside an outer sealed type. The compiler still enforces exhaustiveness across the full tree.

sealed class UiState {
    object Loading : UiState()
    sealed class Loaded : UiState() {
        data class Success(val items: List<String>) : Loaded()
        data class Empty(val message: String) : Loaded()
    }
    data class Error(val msg: String) : UiState()
}
fun render(s: UiState) = when (s) {
    UiState.Loading -> "loading"
    is UiState.Loaded.Success -> "${s.items.size} items"
    is UiState.Loaded.Empty -> "empty: ${s.message}"
    is UiState.Error -> "err: ${s.msg}"
}
fun main() {
    println(render(UiState.Loaded.Success(listOf("a", "b"))))
}

All lessons in this course

  1. sealed class vs sealed interface: When to Use Each
  2. Exhaustive when with Sealed Hierarchies
  3. Modeling UI State with Sealed Classes
  4. Nesting and Combining Sealed Hierarchies
← Back to Kotlin Academy