【问题标题】:How does HashMap implement the MutableMap interface in Kotlin?HashMap 如何在 Kotlin 中实现 MutableMap 接口?
【发布时间】:2017-03-04 16:08:54
【问题描述】:

(注意:下面的 Kotlin Koans 可能有剧透。)

给定一个高阶函数,它采用这样的函数字面量:

fun <K, V> buildMap(build: MutableMap<K, V>.() -> Unit): Map<K, V> {
    // How does java.util.HashMap satisfy the MutableMap interface?
    // Does Kotlin support ducktyping?
    val map = HashMap<K, V>()
    map.build()
    return map
}

java.util.HashMap 如何满足build 针对的MutableMap 接口? Kotlin 是否支持某种鸭子类型,或者这是 Kotlin 语言中的一种特殊情况,仅适用于 JDK 中的某些类?

我查看了the Kotlin documentation on interfaces 并搜索了一下,但找不到任何似乎可以解释这一点的东西。

【问题讨论】:

标签: java kotlin


【解决方案1】:

《Kotlin in Action》一书对ArrayListHashMap 做了以下说明:

Kotlin 将它们视为分别继承自 Kotlin 的 MutableListMutableSet 接口。

所以基本上是的,正如您所建议的,这是在 Kotlin 编译器中以某种方式实现的这些集合的特例。不幸的是,这就是它们提供的所有细节,因此如果您想了解更多信息,您可能必须深入了解编译器的源代码。

我想主要的收获是这不是您可以自己使用的语言功能。

【讨论】:

  • 看起来映射是hardcoded in the Kotlin sourceCollectionIterableIteratorListListIteratorMapMap.Entry和@987654333所以我接受这个答案是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 2018-07-13
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多