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

У меня есть сторонняя библиотека 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"