枚举
不带参数的枚举
enum class Color {
RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO
}
带参数的枚举
enum class Color(val r: Int, val g: Int, val b: Int) {
VIOLET(0, 0, 0), INDIGO(0, 0, 0), BLUE(0, 0, 0), RED(255, 0, 0), ORANGE(255, 165, 0), GREEN(0, 255, 0),YELLOW(0, 0, 0);
fun rgb() = (r * 256 + g) * 256 + b
}
相关使用示例
单when的使用
fun getMneomic(color: Color) {
when (color) {
Color.RED -> "Heiii"
Color.ORANGE -> "Orange"
Color.GREEN -> "Green"
else -> "HHH"
}
}
多个when合并分支
fun getWarmth(color: Color) {
when (color) {
Color.RED, Color.ORANGE -> "warm"
Color.GREEN -> " Cold"
else -> "media"
}
}
混合
fun mix(c1: Color, c2: Color) {
when (setOf(c1, c2)) {
setOf(Color.RED, Color.YELLOW) -> Color.ORANGE
setOf(Color.YELLOW, Color.BLUE) -> Color.GREEN
setOf(Color.BLUE, Color.VIOLET) -> Color.INDIGO
else -> throw Exception("Dirty color")
}
}
混合优化
fun mixOptimized(c1: Color, c2: Color) {
when {
(c1 == Color.RED && c2 == Color.YELLOW) || (c1 == Color.YELLOW && c2 == Color.RED) -> Color.ORANGE
(c1 == Color.YELLOW && c2 == Color.BLUE) || (c1 == Color.BLUE && c2 == Color.YELLOW) -> Color.GREEN
(c1 == Color.BLUE && c2 == Color.VIOLET) || (c1 == Color.VIOLET && c2 == Color.BLUE) -> Color.INDIGO
else -> throw Exception("Dirty color")
}
}