Using Sealed Classes for Better State Management

Sealed classes are a powerful feature in Kotlin that allow you to represent restricted class hierarchies. This is particularly useful when managing different states in your application, such as loading, success, and error states. By using sealed classes, you can ensure that all possible states are handled, making your code safer and more maintainable.


sealed class Result {
    data class Success(val data: T) : Result()
    data class Error(val exception: Exception) : Result()
    object Loading : Result()
}

fun fetchData(): Result {
    return try {
        // Simulate a network call
        Result.Loading
        val data = "Fetched Data"
        Result.Success(data)
    } catch (e: Exception) {
        Result.Error(e)
    }
}

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