我正在尝试找到对 Kotlin 中的枚举进行“反向查找”的最佳方法。我从 Effective Java 中得到的一个收获是,您在枚举中引入了一个静态映射来处理反向查找。用一个简单的枚举将它移植到 Kotlin 会导致我的代码看起来像这样:
enum class Type(val value: Int) {
A(1),
B(2),
C(3);
companion object {
val map: MutableMap<Int, Type> = HashMap()
init {
for (i in Type.values()) {
map[i.value] = i
}
}
fun fromInt(type: Int?): Type? {
return map[type]
}
}
}
我的问题是,这是最好的方法,还是有更好的方法?如果我有几个遵循类似模式的枚举怎么办? Kotlin 有没有办法让这段代码在枚举中更易于重用?
最佳答案
首先,fromInt()
的参数应该是Int
,而不是Int?
。尝试使用 null 获取 Type
显然会导致 null,调用者甚至不应该尝试这样做。 Map
也没有理由是可变的。代码可以简化为:
companion object {
private val map = Type.values().associateBy(Type::value)
fun fromInt(type: Int) = map[type]
}
那段代码太短了,坦率地说,我不确定是否值得尝试寻找可重用的解决方案。
https://stackoverflow.com/questions/37794850/