将 java.util.function.Function 转换为 Kotlin 的函数式接口类型

tir*_*der 4 java android kotlin functional-interface

我正在使用分别用 Java 和 Kotlin 编码的两个模块,因此需要一些互操作性。

在其中一种情况下,java 模块返回类型为 的函数接口java.util.function.Function,该接口将由 kotlin 代码使用。

我可以按原样使用 java 类型。但是,我希望能够将其转换为 kotlin 的本机类型,无论是它kotlin.Function还是kotlin.reflect.KFunction. 这样做的原因是能够支持与 java 模块类似的 kotlin 模块,该模块为客户端提供功能。

有什么办法可以做到这一点吗?

Ale*_*nov 5

你不能在它们之间进行转换,它们只是两个不同的接口。但编写转换函数很简单:

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) }
Run Code Online (Sandbox Code Playgroud)

kotlin-stdlib-jdk8可以提供这些,但似乎没有。

当然,在大多数情况下,您可以同时使用 Kotlin 和 Java lambdas/方法引用。