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 -> ... }) 
  • Proxies de service Vert.x de Kotlin con vertx-codegen
  • VertX Web no elimina cookies
  • El complemento kapt no funciona con gradle-script-kotlin
  • "La respuesta ya se ha escrito" con Vertx
  • ¿Cómo puedo get una request web actual usando Vert.x Web?
  • Vertx plus Koutlin coroutines cuelga para siempre
  • Cómo crear verticle de fábrica en VertX?