在Kotlin中,Map类具有toLinkedMap()toSortedMap()扩展方法。

但是为什么没有toHashMap()方法呢?实际上,许多stdlib方法产生的Map实现都是LinkedHashMap,但是在我的代码中将其强制转换为HashMap会使我依赖糟糕的实现。

引入这种方法将使开发人员免于深入研究实现,而对于当前的实现,它将仅执行强制转换。

我的用例是:

val matchesInClass: HashMap<MessageClass, HashMap<Int, Int>>

//...

for ((cl, matches) in matchesInClass) {
    matchesInClass[cl] = matches.filterKeys { it !in banned } //error: not a HashMap
}

当我使用HashMap(matches.filterKeys { it !in banned })时,会导致创建新 map 的开销,我很乐意避免这种情况。

那么,是设计使然吗?

最佳答案

我同意stdlib中的这个位置不方便。但是,您如何实现这种功能toHashMap()

如果基础 map 是HashMap,则最简单的实现是强制转换as HashMap,否则将其转换。因此,在更改实现的情况下,该代码的性能将发生巨大变化。那很糟。

因此,恕我直言,我更喜欢不安全的转换,如果stdlib以一种奇怪的方式更改并失败,该转换将失败。

无论如何,总是欢迎您在YouTrack http://youtrack.jetbrains.com/issues/KT中以票证形式报告此问题。您在这里对问题做了漂亮的描述,因此不应该花很长时间。

08-18 11:36
查看更多