enums - Kotlin 中具有反向查找的有效枚举?

我正在尝试找到对 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/

相关文章:

loops - Kotlin 中 `break` 中的 `continue` 和 `forEach`

android - Kotlin Android 启动新 Activity

function - 何时在 Kotlin 中使用内联函数?

kotlin - 在 Kotlin 中创建抽象类的实例

unit-testing - 如何在 Kotlin 中管理单元测试资源,例如启动/停止数据库连接或嵌

syntax - Kotlin 中的变量名或扩展运算符之前的 Kotlin 星号运算符

java - Kotlin:等效于 KClass 的 getClass()

kotlin - 覆盖 Kotlin 数据类的 getter

kotlin - Kotlin 中有构造函数引用吗?

kotlin - "experimental"Kotlin协程可以在生产中使用吗?