Как создать экземпляр анонимного интерфейса в Котлине?

У меня есть сторонняя библиотека Java, которая имеет объект с таким интерфейсом:

public interface Handler<C> { void call(C context) throws Exception; } 

Как я могу кратко реализовать его в Kotlin, подобном анонимному классу Java следующим образом:

 Handler<MyContext> handler = new Handler<MyContext> { @Override public void call(MyContext context) throws Exception { System.out.println("Hello world"); } } handler.call(myContext) // Prints "Hello world" 

Предполагая, что интерфейс имеет только один метод, вы можете использовать SAM

 val handler = Handler<String> { println("Hello: $it")} 

Если у вас есть метод, который принимает обработчик, вы можете даже опустить аргументы типа:

 fun acceptHandler(handler:Handler<String>){} acceptHandler(Handler { println("Hello: $it")}) acceptHandler({ println("Hello: $it")}) acceptHandler { println("Hello: $it")} 

Если интерфейс имеет более одного метода, синтаксис немного более подробный:

 val handler = object: Handler2<String> { override fun call(context: String?) { println("Call: $context") } override fun run(context: String?) { println("Run: $context") } } 

Самый простой ответ – это лямбда Котлина:

 val handler = Handler<MyContext> { println("Hello world") } handler.call(myContext) // Prints "Hello world" 
Intereting Posts
Предупреждение и выход из системы Kotlin / Quasar Fiber Ошибка приложения при попытке доступа к другому действию Оператор, новый в Kotlin (синтаксис) Как распределить конфигурацию котла Kotlin по нескольким проектам Gradle? Точка останова не попадает внутрь обратного вызова Kotlin в Intellij База данных Firebase сериализует int для перечисления? Firebase-соединение не работает на Linux в SpringBoot В чем разница между Foo :: class.java и Foo :: javaClass? Конфигурация запуска / отладки Kotlin Внедрение интерфейса анонимно в Kotlin приводит к ошибке «не имеет конструкторов» Out-projected type «ArrayList <*>» запрещает использование «public open fun add (index: Int, element: E): Unit, определенный в java.util.ArrayList ' Kotlin и Dagger: могу ли я использовать объект @Inject для объекта, который все еще делает его нулевым / необязательным? Данные кэша из HTTP-запроса в RxJava Невозможно разрешить зависимости для задачи assembleAndroidTest с плагином Android Gradle 3.0.1 предупреждение о прерывании kotlin, устаревшее для android