Data Classes and Sealed Types
Sealed Class Basics
Represent a value that must be one of a small set of known shapes.
sealed-class
A sealed class keeps its direct subclasses known to the compiler.
Sealed Class Basics
SealedClassBasics.kt
Replay: real traced execution (multi-file project)
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 = "hi"
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 = "hello"
val message: Message
if (body == "") {
message = EmptyMessage
} else {
message = TextMessage(body)
}
val label = describe(message)
println("body=${body.ifEmpty { "none" }}")
println("label=$label")
}
body ← hi
12fun main() {13 val body→ hi = "hi" //@body="", "hello"14 val message: Messageelse
17 message = EmptyMessage18} else {19 message = TextMessage(bodyhi)20}val label = describe(message)
22val label = describe(message)fun describe(message: Message): String
5fun describe(message: Message): String {6 if (message is TextMessage) {if (message is TextMessage)
5fun describe(message: Message): String {6 if (message is TextMessage) {7 return "text:${message.bodyhi.length}"8 }label ← text:2
22 val label→ text:2 = describe(message)2324 println("body=${bodyhi.ifEmpty { "none" }}")25 println("label=$labeltext:2")26}outputbody=hi label=text:2
body ← (empty)
12fun main() {13 val body→ (empty) = ""14 val message: Messageif (body == "")
16if (body(empty) == "") {17 message = EmptyMessage18} else {val label = describe(message)
22val label = describe(message)fun describe(message: Message): String
5fun describe(message: Message): String {6 if (message is TextMessage) {7 return "text:${message.body.length}"8 }9 return "empty"10}label ← empty
22 val label→ empty = describe(message)2324 println("body=${body(empty).ifEmpty { "none" }}")25 println("label=$labelempty")26}outputbody=none label=empty
body ← hello
12fun main() {13 val body→ hello = "hello"14 val message: Messageelse
17 message = EmptyMessage18} else {19 message = TextMessage(bodyhello)20}val label = describe(message)
22val label = describe(message)fun describe(message: Message): String
5fun describe(message: Message): String {6 if (message is TextMessage) {if (message is TextMessage)
5fun describe(message: Message): String {6 if (message is TextMessage) {7 return "text:${message.bodyhello.length}"8 }label ← text:5
22 val label→ text:5 = describe(message)2324 println("body=${bodyhello.ifEmpty { "none" }}")25 println("label=$labeltext:5")26}outputbody=hello label=text:5