¿Cómo implementa HashMap la interfaz MutableMap en Kotlin?

(Nota: hay un spoiler potencial para uno de los Kotlin Koans a continuación).

Dada una function de order superior que toma una function literal como esta:

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 } 

¿Cómo es que java.util.HashMap satisface la interfaz MutableMap que está orientada la build ? ¿Kotlin admite algún tipo de pato o es un caso especial en el lenguaje de Kotlin solo para ciertas classs que son parte del JDK?

Miré la documentation de Kotlin sobre las interfaces y busqué un poco, pero no pude encontrar nada que pareciera explicar esto.

El libro Kotlin in Action dice lo siguiente sobre ArrayList y HashMap :

Kotlin los ve como henetworkingados de las interfaces MutableList y MutableSet Kotlin, respectivamente.

Así que básicamente sí, como ha propuesto, es un caso especial para estas collections que se implementa de alguna manera en el comstackdor de Kotlin. Desafortunadamente, este es todo el detalle que proporcionan, así que si quieres saber más, probablemente tengas que sumergirte en la fuente del comstackdor.

Supongo que lo más importante es que esta no es una característica del idioma que puedas usar tú mismo.

  • Convención de encoding para funciones vacías que deben ser anuladas en Kotlin
  • ¿Kotlin tiene un recolector de basura? Si es así, ¿en qué algorithm está basado?
  • Nombre de image dibujable inaccesible en Kotlin?
  • ¿Cómo inicializar una matriz en Kotlin?
  • Kotlin 'hasta' diversión creando basura IntRange
  • RX java / Android cómo lograr este brindis en cada clic usando el operador de rebote
  • ¿KAnnotator está trabajando en Android Studio?
  • ¿Por qué el tipo de expresión objectOfTypeT :: class es KClass <out T>?
  • Función delegada de llamada (base) al usar la delegación de class desde dentro de anulación
  • ¿Qué es un "receptor" en Kotlin?
  • Manera fácil de mapear models de datos a models de dominio