Intereting Posts
Просмотр Recycler не плавно прокручивается Как установить не-встроенный OnClickListener в Котлин? Блокировка serialVersionUID в Котлине Количество экземпляров каждого тега с использованием функционального программирования Проблемы с подключением API-интерфейсов доступа к приложениям с поддержкой – Android Kotlin – Is kotlin содержит класс Object, такой как базовый класс в java? Невозможно повторно использовать параметры функции LibGDX: Другие библиотеки не работают? Какое надлежащее обходное решение для @BeforeAll в Котлине Преобразует ли файл Kotlin в java, добавив к нему java-код и вернувшись обратно в Kotlin так же, как добавление кода непосредственно в файл Kotlin? Как преобразовать многие AsyncTasks в Rx Observables в Android? kotlin.TypeCastException: null не может быть отброшен в ненулевой тип kotlin.Long Захват и сохранение изображения с помощью Kotlin в Android Studio PendingIntent.getBroadcast () всегда возвращает null с FLAG_UPDATE_CURRENT Условные побочные эффекты и дополнительные типы в Котлине

Декларация интерфейса 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 не является необходимым и поэтому не поддерживается.

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