¿Cómo crear una instancia de interfaz anónima en Kotlin?

Tengo una biblioteca Java de terceros que tiene un object con una interfaz como esta:

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

¿Cómo puedo implementarlo concisamente en Kotlin similar a una class anónima de Java como esta?

 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" 

Suponiendo que la interfaz tiene solo un método, puede usar SAM

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

Si tiene un método que acepta un controller, puede incluso omitir los arguments de tipo:

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

Si la interfaz tiene más de un método, la syntax es un poco más detallada:

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

La respuesta más simple probablemente sea la lambda de Kotlin:

 val handler = Handler<MyContext> { println("Hello world") } handler.call(myContext) // Prints "Hello world" 
  • Implementación de interfaz de retorno con Kotlin y lambda
  • Referencia al método de una instancia particular en Kotlin
  • Anulación de múltiples methods de interfaz en expresiones Kotlin lambda
  • Tipo de function de Kotlin en su lugar interfaz funcional lambda
  • Expresiones Lambda en Kotlin
  • Kotlin: comparar los valores de propiedad de diferentes objects objective con (fuera) reflexión
  • Kotlin: function genérica como tipo de retorno?
  • Pasar funciones a funciones en Kotlin
  • Cuando los parameters lambda deben ser noinline en Kotlin?
  • "Lambda con receptor": ¿Qué es esta construcción de Kotlin?
  • Kotlin: Declaración a Lambda