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 classvariants for sealed class subtypes.
🎉 You have completed the Kotlin course!