Kotlin Sealed Class

In Kotlin, a sealed class is a class that can only be subclassed within its own file. Sealed classes are used to represent restricted class hierarchies, where the set of subclasses is known and limited.

A sealed class is defined using the sealed keyword. Here's an example:

refer to‮gi:‬iftidea.com
sealed class Result<out T>
class Success<T>(val data: T) : Result<T>()
class Error(val message: String) : Result<Nothing>()

In this example, we define a sealed class called Result, which has two subclasses: Success and Error. The Success class has a generic type parameter T and a property data of type T. The Error class has a property message of type String and a generic type parameter of Nothing, which means it doesn't have any value.

Because Result is a sealed class, its subclasses must be defined in the same file as the sealed class. This allows the Kotlin compiler to check that all possible subclasses are covered in a when expression. Here's an example:

fun processResult(result: Result<Any>): String {
    return when (result) {
        is Success -> "Data: ${result.data}"
        is Error -> "Error: ${result.message}"
    }
}

In this example, we define a function called processResult that takes a Result<Any> parameter and returns a string. We use a when expression to check the type of the result parameter, and return a different string based on whether it is a Success or Error instance.

Sealed classes are often used to represent algebraic data types, which are types that can have multiple possible values. They provide a safe way to define a restricted class hierarchy and ensure that all possible cases are covered in pattern matching expressions.