嘿,我想用一个值来实例化一个新的枚举:
我的枚举:
enum class DirectionSwiped(raw: Int){
LEFT(4),
RIGHT(8);
}
我想像这样实例化新的枚举:
val direction = DirectionSwiped(raw: 4)
但我收到此错误:
不能实例化枚举类型
为什么?这是一个基本功能。
迅速:
enum Direction: Int{
case right = 2
}
实例化如下:
let direction = Direction(rawValue: 2)
答案 0 :(得分:3)
是的
enum class DirectionSwiped(val raw: Int){
LEFT(4),
RIGHT(8);
}
val left = DirectionSwiped.LEFT
val right = DirectionSwiped.RIGHT
val leftRaw = DirectionSwiped.LEFT.raw
val rightRaw = DirectionSwiped.LEFT.raw
val fromRaw = DirectionSwiped.values().firstOrNull { it.raw == 5 }
这是访问enum class
实例的正确方法
您要尝试的是在定义站点外部创建一个新实例,这对于enum
或sealed
类是不可能的,这就是为什么错误指出构造函数为 private < / strong>
答案 1 :(得分:1)
如错误所示,您无法在Kotlin中实例化枚举。可能的解决方法是使用映射和2个辅助方法从原始值获取枚举值,反之亦然:
enum class DirectionSwiped {
LEFT,
RIGHT;
fun toRaw() = enumToRaw[this]
companion object {
val rawToEnum = mapOf(
4 to LEFT,
8 to RIGHT
)
val enumToRaw = rawToEnum.entries.associate{(k,v)-> v to k}
fun ofRaw(raw: Int): DirectionSwiped? = rawToEnum[raw]
}
}
用法:
val direction = DirectionSwiped.ofRaw(4) // LEFT
val raw = DirectionSwiped.LEFT.toRaw() // 4