Vert.x Kotlin Type Mismatch requinetworking Controlador <AsyncResult <Unit >> found (Handler <AsyncResult <Unit >>) -> Unidad

El siguiente es un método reescrito en Kotlin de Java:

fun publishMessageSource( name: String, address: String, completionHandler: Handler<AsyncResult<Unit>> ) { val record = MessageSource.createRecord(name, address) publish(record, completionHandler) } 

Sin embargo, cuando lo llamo de la siguiente manera:

 publishMessageSource("market-data", ADDRESS, { record: Handler<AsyncResult<Unit>> -> if (!record.succeeded()) { record.cause().printStackTrace() } println("Market-Data service published : ${record.succeeded()}") }) 

Type Mismatch requinetworking Handler<AsyncResult<Unit>> found (Handler<AsyncResult<Unit>>) -> Unit el error No Type Mismatch requinetworking Handler<AsyncResult<Unit>> found (Handler<AsyncResult<Unit>>) -> Unit .

¿Qué estoy haciendo mal?

Su lambda debería tomar el parámetro que toma el único método de la interfaz del Handler , que es AsyncResult<Unit> en este caso. Su lambda es el Handler , por lo que no toma el Handler como un parámetro.

Creo que también necesitará una llamada explícita al constructor de SAM aquí, ya que su function está escrita en Kotlin, que se vería así:

 publishMessageSource("market-data", ADDRESS, Handler<AsyncResult<Unit>> { record: AsyncResult<Unit> -> ... }) 

Esto crea un Handler<AsyncResult<Unit>> con una lambda que representa su único método.

Finalmente, puede omitir el tipo dentro del lambda para que sea less networkingundante:

 publishMessageSource("market-data", ADDRESS, Handler<AsyncResult<Unit>> { record -> ... }) 
  • Verticle (s) de Vert.x configuration JSON / YAML (preferible por entorno)
  • Cómo crear verticle de fábrica en VertX?
  • Controlador de respuesta de coincidencia con request en VertX
  • Respuesta fragmentada de Vert.x con los datos de la database usando BLOB e hibernación
  • VertX Web no elimina cookies
  • "La respuesta ya se ha escrito" con Vertx
  • Retrofit-Vertx con RxJava2 en Kotlin IllegalStateException message == null