如何在Kotlin中创建一个匿名接口的实例?

我有一个第三方的Java库,它的接口是这样的:

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

我如何在Kotlin中简洁地实现它类似于这样的Java匿名类:

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

假设界面只有一个方法,你可以使用SAM

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

如果你有一个接受处理程序的方法,那么你甚至可以省略types参数:

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

如果接口有多个方法,则语法稍微冗长些:

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

最简单的答案可能是Kotlin的lambda:

 val handler = Handler { println("Hello world") } handler.call(myContext) // Prints "Hello world"