4

I am working with two modules that are coded in Java and Kotlin respectively, hence require some bit of interoperability.

In one of the cases the java module returns functional interfaces with the type java.util.function.Function, which is to be consumed by the kotlin code.

I could use the java type as it is. However, I would like to be able to cast this to kotlin's native type, be it kotlin.Function or kotlin.reflect.KFunction. The reason behind doing so is to be able to support a similar kotlin module as that of the java one, which surfaces functions for the client.

Is there any way to do this?

tirtha2shredder
  • 105
  • 1
  • 7

1 Answers1

5

You can't cast between them, they are just two different interfaces. But it's trivial to write conversion functions:

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 could provide these, but doesn't seem to.

And of course, you can just use both Kotlin and Java lambdas/method references for both in most circumstances.

Alexey Romanov
  • 167,066
  • 35
  • 309
  • 487