Represent a value that must be one of a small set of known shapes.

Sealed Class Basics

SealedClassBasics.kt
sealed class Message
data class TextMessage(val body: String) : Message()
object EmptyMessage : Message()

fun describe(message: Message): String {
    if (message is TextMessage) {
        return "text:${message.body.length}"
    }
    return "empty"
}

fun main() {
    val body = 
    val message: Message

    if (body == "") {
        message = EmptyMessage
    } else {
        message = TextMessage(body)
    }

    val label = describe(message)

    println("body=${body.ifEmpty { "none" }}")
    println("label=$label")
}
sealed class Message
data class TextMessage(val body: String) : Message()
object EmptyMessage : Message()

fun describe(message: Message): String {
    if (message is TextMessage) {
        return "text:${message.body.length}"
    }
    return "empty"
}

fun main() {
    val body = 
    val message: Message

    if (body == "") {
        message = EmptyMessage
    } else {
        message = TextMessage(body)
    }

    val label = describe(message)

    println("body=${body.ifEmpty { "none" }}")
    println("label=$label")
}
sealed class Message
data class TextMessage(val body: String) : Message()
object EmptyMessage : Message()

fun describe(message: Message): String {
    if (message is TextMessage) {
        return "text:${message.body.length}"
    }
    return "empty"
}

fun main() {
    val body = 
    val message: Message

    if (body == "") {
        message = EmptyMessage
    } else {
        message = TextMessage(body)
    }

    val label = describe(message)

    println("body=${body.ifEmpty { "none" }}")
    println("label=$label")
}
sealed-class A sealed class keeps its direct subclasses known to the compiler.