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

我有一个第三方的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")}) 

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

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

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

 val handler = Handler<MyContext> { println("Hello world") } handler.call(myContext) // Prints "Hello world" 
Interesting Posts