在Kotlin中,Map
类具有toLinkedMap()
和toSortedMap()
扩展方法。
但是为什么没有toHashMap()
方法呢?实际上,Map
许多stdlib方法的最终实现是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 })
它会导致创建新地图的开销,我很乐意避免。
那么,是设计使然吗?
我同意stdlib中的这个位置不方便。但是您如何实现这样的功能toHashMap()
?
as HashMap
如果基础地图是HashMap,则最简单的实现进行转换,否则进行转换。因此,在更改实现的情况下,该代码的性能将发生巨大变化。那很糟。
因此,恕我直言,我更喜欢不安全的投射,如果stdlib
以一种奇怪的方式进行更改,它会失败并提醒我。
无论如何,始终欢迎您在YouTrack http://youtrack.jetbrains.com/issues/KT中以票证形式报告此问题。您在这里对问题做了漂亮的描述,因此不应该花很长时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句