当前位置: 首页 > 知识库问答 >
问题:

在Kotlin中使用反向查找的有效枚举?

丁嘉
2023-03-14

我试图找到在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中是否有一种方法可以使此代码在枚举之间更加可重用?

共有1个答案

孟茂
2023-03-14

首先,fromint()的参数应该是int,而不是int?。尝试使用null获取类型显然会导致null,调用者甚至不应该尝试这样做。映射也没有变的理由。代码可以简化为:

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

代码太短了,坦率地说,我不确定是否值得尝试找到一个可重用的解决方案。

 类似资料:
  • 假设我有一个枚举: 如果我有一个数字,我可以这样得到枚举键: 然而,这给了我一个字符串。我怎样才能得到一个Color类型的变量呢?即:

  • 问题内容: 在查找循环方面已经存在一些问题,但是我没有找到SQL的解决方案(首选MSSQL)。 这些表将是Node(NodeID INT)和Edge(EdgeID INT,NodeID1 INT,NodeID2 INT) 在有向图中找到周期的性能很好的解决方案是什么? 问题答案: 该解决方案非常简单明了,但时间更长: 首先,将生成通过该图的所有路径的列表,以使任何路径都不会包含同一条边。 从此信息

  • 枚举定义- 存储库- 服务电话- 例外情况- 为什么它会抛出此异常?我已经定义了@Enumerated(EnumType.STRING),所以它应该期望存储在db中的字符串类型。

  • 问题内容: 我有以“键-键”格式而不是“键-值”格式组织的数据。这就像一个HashMap,但是我将需要在两个方向上进行O(1)查找。这种数据结构是否有名称,Java的标准库中是否包含类似的名称?(或者Apache Commons?) 我可以编写自己的类,该类基本上使用两个镜像的Map,但我不想重蹈覆辙(如果已经存在,但我只是没有在寻找正确的术语)。 问题答案: Java API中没有此类。您想要的

  • 问题内容: 我有一个场地,这个场地上发生了很多事件。我的模型如下所示: 我想显示在某个场所发生的所有事件。我怎样才能做到这一点?我当前的视图如下所示: 问题答案: 您可以使用另一种方式。 请注意,是经理的对象,像,这样你就可以打电话,,和类似它来得到一个查询集。 请参阅Django文档

  • 问题内容: 我有一个场地,这个场地上发生了很多事件。我的模型如下所示: 我想显示在某个场所发生的所有事件。我怎样才能做到这一点?我当前的视图如下所示: 问题答案: 你可以使用另一种方式。 请注意,是经理的对象,像,这样你就可以打电话和类似它来得到一个查询集。