¿Por qué las expresiones Lambda se comportan de manera diferente para las classs de Kotlin y Java?

¿Por qué puedo usar Lambda para la class java.lang.Thread , pero no para MyThread ?

 interface MyRunnable{ fun run() } class MyThread(runnable : MyRunnable){ } fun test(){ Thread({}) // All Alright MyThread({}) //Exception. Type mismatch <<-- Why ? } 

Enlace para verificar este ejemplo: https://try.kotlinlang.org/#/UserProjects/tbs79qfkh50psp7r3qrdrinrmt/sfkpjq1bjvg4r6d5rmnu6mp4a8

De los documentos en las conversiones de SAM :

Tenga en count que esta característica solo funciona para la interoperabilidad Java; como Kotlin tiene types de funciones adecuados, la conversión automática de funciones en implementaciones de las interfaces de Kotlin es innecesaria y, por lo tanto, no está soportada.

En otras palabras, el uso de la syntax { ... } solo se admite para llamadas a Java. El razonamiento público es que puede hacer cualquiera de:

  1. Haga que su constructor MyThread tome un tipo de function de primera class como parámetro.

  2. Use una expresión de object :

     MyThread(object : MyRunnable { override fun run() {} }) 

Esto es obviamente bastante detallado. Sin embargo, de acuerdo con este ticket de Kotlin, la syntax lambda es en realidad solo parte de la interoperabilidad de Java, no es parte del lenguaje central, por lo que sería necesario un layout cuidadoso para hacer algo más.

  • Error al usar IntDef definido en Kotlin cuando se usa en Java
  • ¿Cómo crear un IntArray de tamaño fijo e inicializar el array más adelante en Kotlin?
  • Kolin - Lista de artículos para el artículo de lists
  • Vista de actualización de Android después del éxito de JSONRequest
  • TornadoFX - eliminar elemento con ContextMenu hacer clic derecho
  • No puedo ver la variable Kotlin en el estudio Android
  • Kotlin VS Scala: Implementar methods con parameters constructor primarios
  • Kotlin: compruebe si se ha inicializado lazy val
  • ¿Qué path es mejor entre object compañero y diversión sin una class en Kotlin?
  • Mapa de cortocircuito de Kotlin {}. FirstOrNull {}
  • ¿Cómo encadenar transformaciones en Android al usar datos en vivo?