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