enum class E1 { A, B } enum class E2 { A, B } fun foo1(e1: E1, e2: E2) { e1 == e2 e1 != e2 e1 == E2.A E1.B == e2 E1.A == E2.B e1 == E1.A E1.A == e1 e2 == E2.B E2.B == e2 } fun foo2(e1: E1, e2: E2) { when (e1) { E1.A -> {} E2.A -> {} E2.B -> {} e1 -> {} e2 -> {} else -> {} } } fun foo3(e1: Enum, e2: Enum, e: Enum<*>) { e1 == e e1 == e2 e1 == E1.A e1 == E2.A when (e1) { e1 -> {} e2 -> {} e -> {} E1.A -> {} E2.A -> {} else -> {} } when (e) { e -> {} e2 -> {} E1.A -> {} E2.A -> {} else -> {} } }