我需要得到 从枚举类中使用与元素同名的用户输入来创建元素。除非我级联if语句,否则它不起作用。
我试图通过创建一个变量并使用它来获取Dir来获取元素,但它不起作用
enum class Dir( val dx: Int = 0, val dy: Int = 0) {
UP(0, -1), Down(0, 1), Left(-1,0), Right(1,0)
}
fun main(){
val choice = readln()
println(Dir.choice)
}
我期望得到如下结果:
使用者输入:向上
(0,-1)(% s)
使用者输入:向下
(0个,1个)
1条答案
按热度按时间93ze6v8z1#
有几种方法可以做到这一点,其中之一是使用枚举的内置
valueOf()
函数,该函数返回Dir
值,其名称与传递给valueOf
的字符串相匹配:但是这有点脆弱,这取决于您从哪里获得输入。如果在重构过程中您决定重命名一个常量,您可能会中断一些用户输入。
一个很好的例子是您在值
UP
(全部大写)中输入的错误。如果您将其重命名为Up
,则输入UP
的用户将开始失败。因此,您可以改为在枚举中添加一个属性来表示所需的外部名称,并编写一个函数来根据此外部名称查找枚举值: