Декларация интерфейса Java vs Kotlin

Скажем, у меня есть интерфейсы Java и Kotlin:

public interface JavaInterface { void onTest(); } interface KotlinInterface { fun onTest() } 

Почему я не могу создать экземпляр интерфейса Kotlin без конструктора?

 // this is okay val javaInterface: JavaInterface = JavaInterface { } // compile-time exception: interface does not have constructor val kotlinInterface1: KotlinInterface = KotlinInterface { } // this is okay val kotlinInterface2: KotlinInterface = object : KotlinInterface { override fun onTest() { } } 

Почему я не могу создать экземпляр KotlinInterface же, как я сделал с JavaExample как и в первом примере?

Это потому, что у Kotlin есть SAM («единственный абстрактный метод») только для интерфейсов Java. Это так по дизайну . В документации также есть информация об этом:

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

Связанный выпуск