when 식을 사용해 enum 항목마다 서로 다른 동작을 수행할 수 있다. 다음 코드에서는 Level의 원소들뿐 아니라 Level이라는 이름까지 임포트해 사용한다.
Enumerations/CheckingOptions.kt
package checkingoptions
import atomictest.*
import enumerations.Level
import enumerations.Level.*
fun checkLevel(level: Level) {
when (level) {
Overflow -> trace(">>> Overflow!")
Empty -> trace("Alert: Empty")
else -> trace("Level $level OK")
}
}
fun main() {
checkLevel(Empty)
checkLevel(Low)
checkLevel(Overflow)
trace eq """
Alert: Empty
Level Low OK
>>> Overflow!
"""
}
checkLevel()은 이넘 상수 중 두 가지에 대해서만 특정 동작을 수행하고, 나머지 상수에 대해서는(else의 경우) 평범한 동작을 수행한다.