¿Hay alguna forma mejor de escribir invocaciones de CompletableFutrue.XXXasync () en kotlin?

Java CompletableFuture<T> tiene muchos methods asíncronos, estáticos o de instancia, en este formatting

 public <U> CompletableFuture<U> XXXasync(SomeFunctionalInterface<T> something, Executor executor) 

Si tiene suficiente experiencia con FP en kotlin, inmediatamente se dará count de que estas funciones son extremadamente incómodas de usar en kotlin, porque la interfaz SAM no es el último parámetro.

 aCompletableFutrue.thenComposeAsync(Function<SomeType, CompletableFuture<SomeOtherType>> { // ^ WHAT A LONG TYPE NAME THAT NEED TO BE HAND WRITTEN // do something that has to be written in multiple lines. // for that sake of simplicity I use convert() to represent this process convert(it) }, executor) 

Esa Function tiene una firma genérica muy larga que no sé cómo generar IDE. Será un simple error si el nombre del tipo se vuelve aún más largo o contiene un tipo parametrizado o tiene annotations de varianza de tipo.

También se ve desagradable por el final , executor) en la línea 5.

¿Hay alguna funcionalidad faltante en kotlin o IDE que pueda ayudar con la situación? Al less no quiero escribir ese largo constructor de SAM solo.


Soluciones rechazadas:

  1. El uso de un parámetro con nombre no parece funcionar porque esta function solo funciona en una function de kotlin.

  2. Abandonar los methods asíncronos suena mal desde el principio.

  3. Kotlin corountine es rechazado porque estamos trabajando con algunas tontas bibliotecas de Java que solo aceptan CompletionStage .

SI llama a la API de Java que finalmente tiene un parámetro de interfaz funcional, puede simplemente usar lambda en kotlin.

 val composed: CompletableFuture<String> = aCompletableFutrue.thenComposeAsync { CompletableFuture.supplyAsync { it.toString() } }; 

En segundo lugar , si no te gusta la firma del método java api. puede escribir sus propios methods de extensión, por ejemplo:

 fun <T, U> CompletableFuture<T>.thenComposeAsync(executor: Executor , mapping: Function1<in T, out CompletionStage<U>>): CompletableFuture<U> { return thenComposeAsync(Function<T,CompletionStage<U>>{mapping(it)}, executor) } 

ENTONCES puedes hacer la lambda a lo largo del método.

 aCompletableFutrue.thenComposeAsync(executor){ // do working } 
  • ¿Extendiendo la class de datos de Kotlin para usar con JPA?
  • ¿Qué significa la palabra key 'by' en Kotlin?
  • Obteniendo el valor de Flux <> en la aplicación cliente basada en polymer
  • La actualización automática de la versión de la biblioteca para proyectos Gradle no está soportada actualmente. Actualice su build.gradle manualmente
  • ¿Por qué la interpolación de cadenas de Kotlin concatena cadenas en Java?
  • Ejecute testings de Kotlin Koans desde Android Studio
  • Deslice el disparador OnLoadFailed () después de cargar toda la image después de desplazarse hacia abajo y desplazarse hacia arriba
  • La tarea de Firebase aún no está completa
  • Devolviendo un valor producido en Kotlin coroutine
  • Sin metadatos android.content.SyncAdapter
  • Android Kotlin: no se puede progtwigr la notificación para una date futura con el administrador de alarmas