是否有自动转换或自动转换字符串为枚举的方法?
enum class Direction {
north, south, west, east
}
fun main() {
val d: Direction = "north" // <== Fails here
}
附注:
我正在寻找简洁的使用枚举的方法,就像TypeScript中的文字(代数)字符串类型。
或者,或者,让下面的代码工作,请不要认为north
是不合格的和冲突的。
enum class Direction {
north, south, west, east
}
enum class Compass {
north, south, west, east
}
fun main() {
val d: Direction = north // <== Fails here
val c: Compass = north // <== Fails here
}
发布于 2021-07-26 11:55:56
你想怎么做是不可能的。唯一更接近的是静态方法valueOf
enum class Direction {
north, south, west, east
}
fun main() {
val d: Direction = Direction.valueOf("north")
println(d)
// Prints north
}
发布于 2021-07-26 12:25:25
第二个示例目前是不可能的,因为您需要两个相互冲突的导入。其他的答案已经解决了第一个例子,它需要使用类似于valueOf
的东西。
然而,有一项建议将使第二个例子成为可能。它是最近的包括在Kotlin特征调查中,它被追踪在KT-16768下的Kotlin问题跟踪器。在已知预期类型的情况下,建议的新功能将允许您在没有导入的情况下使用非限定枚举名称。在您的示例中,即使两个枚举值具有相同的名称,编译器也能够区分在每种情况下使用哪个枚举,因为变量声明中指定了哪些类型。
您可以在视频网络研讨会上找到更多的信息,该网站是在YouTube上发布的,并伴随着这项调查。
发布于 2021-07-26 12:21:44
将import Direction.*
放在要执行此操作的文件的顶部,即使它与定义枚举的文件相同。然后,您可以使用枚举值,而无需对它们进行限定。不需要引号。但是,如果两个枚举具有匹配的名称的值,则这将不会同时适用于它们。
https://stackoverflow.com/questions/68535683
复制相似问题