将java.util.function.Function转换为Kotlin的功能接口类型

时间:2019-03-08 05:43:03

标签: java android kotlin functional-interface

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

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

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

有什么办法吗?

1 个答案:

答案 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 /方法引用。