【Kotlin】Seale class 與 Enum 的比較
差異比較
| 特性 |
|---|
enum class MachineState {
START, SLEEP, RUNNING
}
fun main(argv: Array<String>) {
val machineState = MachineState.SLEEP
val state = machineStateChecker(machineState)
println("current state = $state")
}
fun machineStateChecker(state: MachineState) = when (state) {
MachineState.START -> "Machine is about to start"
MachineState.SLEEP -> "Machine is sleeping"
MachineState.RUNNING -> "Machine is running"
}
fun main(argv: Array<String>) {
val machineState = MachineState.SLEEP
val state = machineStateChecker(machineState)
println("current state = $state")
}
sealed class WorkingState {
// data class
data class Finished(val result: List<String>): WorkingState()
data class ErrorHappened(val whatHappened: String): WorkingState()
// object
object Working: WorkingState()
object EmptyResult: WorkingState()
}
fun main(argv: Array<String>) {
val machineState = checkStateByMachineId(1)
machineStatePrinting(machineState) // result 01
val secondMachineState = checkStateByMachineId(2)
machineStatePrinting(secondMachineState) // result 02
val thirdMachineState = checkStateByMachineId(3)
machineStatePrinting(thirdMachineState) // result 03
}
fun checkStateByMachineId(id: Int): WorkingState {
// Do some logic
when (id) {
1 -> {
val result = mutableListOf("Warthog", "Hedgehog", "Badger", "Drake")
return WorkingState.Finished(result)
}
2 -> return WorkingState.ErrorHappened("Too big too eat.")
3 -> return WorkingState.EmptyResult
else -> return WorkingState.Working
}
}
fun machineStatePrinting(workingState: WorkingState) {
when (workingState) {
is WorkingState.Finished -> {
if (workingState.result.isNotEmpty()) {
for ((index, text) in workingState.result.withIndex()) {
println("the ${index + 1} result is $text")
}
}
}
is WorkingState.ErrorHappened -> {
println("""
Error Occurred: reason is
${workingState.whatHappened}
""".trimIndent())
}
WorkingState.Working -> {
println("Printing machine is working...")
}
WorkingState.EmptyResult -> {
println("It's empty result.")
}
}
}
// result 01
the 1 result is Warthog
the 2 result is Hedgehog
the 3 result is Badger
the 4 result is Drake
// result 02
Error Occurred: reason is
Too big too eat.
// result 03
It's empty result.