我正在使用分别用Java和Kotlin编码的两个模块,因此需要一些互操作性。
在一种情况下,java模块返回类型为java.util.function.Function
的功能接口,该类型的接口将由kotlin代码使用。
我可以按原样使用Java类型。但是,我希望能够将此类型转换为kotlin的本机类型,无论是kotlin.Function
还是kotlin.reflect.KFunction
。这样做的原因是为了能够支持与Java类似的kotlin模块,该模块为客户端提供功能。
有什么办法吗?
答案 0 :(得分:1)
您不能在它们之间进行转换,它们只是两个不同的接口。但是编写转换函数很简单:
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
可以提供这些,但似乎没有。
当然,在大多数情况下,您都可以同时使用Kotlin和Java lambdas /方法引用。