HashMap 如何在 Kotlin 中实现 MutableMap 接口?

Jos*_*hua 5 java kotlin

(注意:下面的 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
}
Run Code Online (Sandbox Code Playgroud)

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

我查看了有关接口的 Kotlin 文档并进行了一些搜索,但找不到任何似乎可以解释这一点的内容。

zsm*_*b13 5

《Kotlin in Action》一书中关于ArrayList和 的内容如下HashMap

\n\n
\n

Kotlin 将它们视为分别继承自 Kotlin\xe2\x80\x99sMutableListMutableSet接口。

\n
\n\n

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

\n\n

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

\n

  • 看起来映射是[在 Kotlin 源代码中硬编码的](https://github.com/JetBrains/kotlin/blob/master/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMap。 java) 用于“Collection”、“Iterable”、“Iterator”、“List”、“ListIterator”、“Map”、“Map.Entry”和“Set”,所以我接受这个答案是正确的。 (3认同)