Как HashMap реализует интерфейс MutableMap в Котлине?

(Примечание: существует потенциальный спойлер для одного из Kotlin Koans ниже.)

Учитывая функцию более высокого порядка, которая выполняет функцию literal следующим образом:

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 удовлетворяет интерфейсу MutableMap который нацелена build ? Поддерживает ли Kotlin какой-то утиный стиль или это особый случай на языке Котлин только для определенных классов, которые являются частью JDK?

Я посмотрел документацию Котлина на интерфейсы и немного искал, но не смог найти ничего, что, казалось бы, объясняло это.

В книге Kotlin in Action говорится о ArrayList и HashMap :

Котлин видит их так, как будто они унаследованы от интерфейсов MutableList и MutableSet от Kotlin, соответственно.

Итак, в принципе, да, как вы предложили, это особый случай для этих коллекций, который каким-то образом реализован в компиляторе Kotlin. К сожалению, это все детали, которые они предоставляют, поэтому, если вы хотите узнать больше, вам, вероятно, придется погрузиться в источник компилятора.

Я предполагаю, что основной вывод – это не языковая функция, которую вы могли бы использовать самостоятельно.