You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何在when语句中比较枚举类属性与main函数内的变量

问题解决:Kotlin枚举类菜单匹配when语句写法

原有代码错误点

  • when语句传入匹配变量option后,分支不需要写option = xxx的赋值语句,直接填写匹配值即可
  • 同个作用域下不能定义两个同名的Menu枚举类,可根据需求二选一使用

方案1:使用带构造属性的枚举实现(更推荐,写法简洁)

枚举类定义:

enum class Menu(val optionName: String, val getOption: Int){
    SALDO("Saldo", 1),
    SACAR("Sacar", 2),
    DEPOSITAR("Depositar", 3),
    EXTRATO("Extrato", 4),
    SAIR("Sair", 5)
}

正确的main函数when写法:

fun main() {
    val clienteFundo = fundo()
    val clienteDados = cliente()
    var option: Int = 1

    when(option){
        Menu.SALDO.getOption -> println("test") // 匹配option等于1的情况
        Menu.SACAR.getOption -> println("执行取款逻辑")
        Menu.DEPOSITAR.getOption -> println("执行存款逻辑")
        Menu.EXTRATO.getOption -> println("执行查询账单逻辑")
        Menu.SAIR.getOption -> println("退出程序")
        else -> println("输入的选项不合法")
    }
}

如果想简化分支写法,可以给枚举加伴生对象方法,直接根据输入的Int转换为对应的枚举实例:

enum class Menu(val optionName: String, val getOption: Int){
    SALDO("Saldo", 1),
    SACAR("Sacar", 2),
    DEPOSITAR("Depositar", 3),
    EXTRATO("Extrato", 4),
    SAIR("Sair", 5);

    companion object {
        fun getByOption(option: Int): Menu? {
            return values().find { it.getOption == option }
        }
    }
}

调用时写法更清晰:

when(Menu.getByOption(option)){
    Menu.SALDO -> println("test")
    Menu.SACAR -> println("执行取款逻辑")
    // 其他分支同理
    null -> println("输入的选项不合法")
}

方案2:使用实现GetMenu接口的枚举实现

先定义对应接口:

interface GetMenu {
    fun getMenu(): Int
}

枚举类定义:

enum class Menu: GetMenu{
    SALDO{
        override fun getMenu() = 1
    },
    SACAR{
        override fun getMenu() = 2
    },
    DEPOSITAR{
        override fun getMenu() = 3
    },
    EXTRATO{
        override fun getMenu() = 4
    },
    SAIR{
        override fun getMenu() = 5
    }
}

对应的when写法:

when(option){
    Menu.SALDO.getMenu() -> println("test")
    // 其他分支同理
    else -> println("输入的选项不合法")
}

内容的提问来源于stack exchange,提问作者Cyperpath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:36:03