Estoy trabajando con dos módulos que están codificados en Java y Kotlin respectivamente, por lo tanto, requieren un poco de interoperabilidad.
En uno de los casos, el módulo java devuelve interfaces funcionales con el tipo java.util.function.Function , que debe ser consumido por el código kotlin.
Podría usar el tipo Java tal como está. Sin embargo, me gustaría poder convertir esto en el tipo nativo de kotlin, ya sea kotlin.Function o kotlin.reflect.KFunction . La razón detrás de hacerlo es poder admitir un módulo kotlin similar al de java, que muestra funciones para el cliente.
¿Hay alguna manera de hacer esto?
No puedes transmitir entre ellos, son solo dos interfaces diferentes. Pero es trivial escribir funciones de conversión:
import java.util.function.Function fun <A, B> Function<A, B>.toKotlin(): (A) -> B = { this.apply(it) } fun <A, B> ((A) -> B).toJava(): Function<A, B> = Function { this(it) } kotlin-stdlib-jdk8 podría proporcionarlos, pero no parece hacerlo.
Y, por supuesto, puede usar Kotlin y Java lambdas/referencias de métodos para ambos en la mayoría de las circunstancias.