2017-03-04 153 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