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

如何通过用户输入获取Kotlin枚举类中的对应元素?

Kotlin通过用户输入字符串获取枚举元素属性值

你直接用Dir.choice的写法是错误的——choice是运行时的局部字符串变量,Kotlin不支持通过这种动态变量名的方式访问枚举成员。要实现通过用户输入获取对应枚举元素的属性,得用枚举类自带的valueOf方法,同时处理输入与枚举名称的匹配问题。

解决方案

首先建议统一枚举元素的命名规范(通常枚举用全大写),这样可以兼容用户输入的大小写差异:

enum class Dir(val dx: Int = 0, val dy: Int = 0) {
    UP(0, -1),
    DOWN(0, 1),
    LEFT(-1, 0),
    RIGHT(1, 0)
}

然后在主函数中处理用户输入,通过valueOf获取枚举实例并访问属性:

fun main() {
    val choice = readln().trim().uppercase()
    try {
        val selectedDir = Dir.valueOf(choice)
        println("(${selectedDir.dx}, ${selectedDir.dy})")
    } catch (e: IllegalArgumentException) {
        println("输入的方向无效,请输入UP/DOWN/LEFT/RIGHT")
    }
}

关键说明

  • uppercase()将用户输入转为全大写,确保和枚举元素名称完全匹配
  • Dir.valueOf(choice)根据字符串获取对应的枚举实例,字符串必须与枚举元素名称严格一致,否则会抛出IllegalArgumentException,所以用try-catch处理无效输入
  • 拿到枚举实例后,直接访问dx和dy属性即可输出预期的坐标值

如果坚持保留原枚举的命名(如UP、Down、Left、Right),则需要让用户输入的字符串与枚举名称完全一致(比如输入Down才能匹配),此时去掉uppercase()即可,但这种方式对用户输入的要求更严格,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:10:32