我正试图找到对Kotlin中的枚举进行"反向查找"的最佳方法.我从有效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?.try 使用null获取Type显然会导致null,而调用者甚至不应该try 这样做.Map也没有理由是可变的.代码可以简化为:

companion object {
    private val map = Type.values().associateBy(Type::value)
    fun fromInt(type: Int) = map[type]
}

坦率地说,该代码太短了,我不确定是否值得try 寻找可重用的解决方案.

Kotlin相关问答推荐

如何将时间值格式化为00:00和00:00:00 Kotlin?""""

插入/更新/upsert时不发出房间流

&x是T&q;和&q;(x为?T)!=空(&Q;)?

我需要后台工作才能使用卡夫卡的消息吗?

用Quarkus和Reactor重写异步过滤器中的数据流

如何在 Kotlin 中为类方法调用传递变量

使用调度程序运行异步 Kotlin 代码

Kotlin 函数中接收者和参数的类型相同

kotlin 如何决定 lambda 中的参数名称?

如何将jooq multiset的结果映射到Hashmap(Java Map)?

runInTransaction 块内的挂起方法

无法为 retrofit2.Call 调用无参数构造函数

为什么 Kotlin Pair 中的条目不可变?

Kotlin 中的内联构造函数是什么?

添加抽象的私有getter和公共setter的正确方法是什么?

如何根据ArrayList的对象属性值从中获取最小/最大值?

Kotlin flatMap - map

如何在不绑定ViewModel(MVVM)中的UI的情况下使用android导航?

从 Kotlin 访问 Integer.class

Dagger 2 androidx fragment不兼容类型