Почему выражения лямбда ведут себя по-разному для классов Kotlin и Java?

Почему я могу использовать Lambda для класса java.lang.Thread , но не для MyThread ?

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

Ссылка, чтобы проверить этот пример: https://try.kotlinlang.org/#/UserProjects/tbs79qfkh50psp7r3qrdrinrmt/sfkpjq1bjvg4r6d5rmnu6mp4a8

Из документов по конверсиям SAM :

Обратите внимание, что эта функция работает только для Java interop; поскольку Kotlin имеет собственные типы функций, автоматическое преобразование функций в реализации интерфейсов Kotlin не является необходимым и поэтому не поддерживается.

Другими словами, использование синтаксиса { ... } поддерживается только для вызовов Java. Общественное обоснование состоит в том, что вы можете сделать любой из:

  1. Создайте MyThread конструктор MyThread в качестве параметра класса первоклассного типа.

  2. Используйте выражение объекта :

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

Это, очевидно, довольно многословно. Однако, согласно этому билету Kotlin, синтаксис лямбда фактически является лишь частью Java-взаимодействия, а не частью основного языка, поэтому потребуется какой-то тщательный дизайн, чтобы сделать что-нибудь еще.