2017-03-04 160 views
4

(注:对于下面的科特林Koans的一个潜在的扰流板。)HashMap如何在Kotlin中实现MutableMap接口?

给定一个高阶函数,它字面这样的功能:

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是否支持某种类型的ducktyping,或者这是Kotlin语言中的一个特例,仅仅是JDK中的某些类的特例?

我看着the Kotlin documentation on interfaces并搜索了一下,但找不到任何似乎解释这一点的内容。

+0

请参阅http://stackoverflow.com/a/34256109/3255152。 – mfulton26

回答

2

的科特林在行动书上说了以下有关ArrayListHashMap

科特林看到他们,如果他们从科特林的MutableListMutableSet接口分别继承。

所以基本上是的,正如你所建议的,这是Kotlin编译器以某种方式实现这些集合的特例。不幸的是,这是他们提供的所有细节,所以如果你想知道更多,你可能不得不深入编译器的源头。

我想主要的一点是,这不是一个你可以使用自己的语言功能。

+1

它看起来像是[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',所以我接受这个答案是正确的。 – Joshua