Kotlin学习笔记(一)枚举

9 阅读1分钟

枚举

不带参数的枚举

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")
    }
}