猿问

Kotlin 函数式接口 java 兼容性

我在 kotlin 中开发一个应用程序,但需要有良好的 Java 支持。我发现的问题是 kotlin 的函数。


这是我以前做的


fun test(loader: (String) -> Int)

但这将从 kotlin 库编译成 Function1 并且由于 jar 大小,我没有将 kotlin 库直接包含在 jar 中,这使 Java 开发人员更难,因为他们必须下载 kotlin 库才能使用它方法。


我尝试使用 Java 中的供应商或函数接口,但我发现这对 kotlin 开发人员来说要困难得多,因为您必须提供更多的变量类型和空检查以及通用参数,这很痛苦..


还尝试创建自己的界面,例如


@FunctionalInterface

interface Function<in T, out R>: Function<R> {

    operator fun invoke(p: T): R

}

和功能


fun test(loader: Function<String, Int>)

但它与默认的 java Function 接口相同


所以唯一可行的方法是让编译器将我的原始函数编译为我自己的函数接口,而不是 kotlin 的函数接口。但我不知道该怎么做。


慕尼黑的夜晚无繁华
浏览 172回答 3
3回答

神不在的星期二

它使 Java 开发人员更难,因为他们必须下载 kotlin 库才能使用此方法JVM 开发人员使用构建系统,例如 Maven 或 Gradle。尝试手动管理依赖项只是一个坏主意。如果在实现中使用了任何 Kotlin 特定的类型,则仍然需要 Kotlin 标准库。

拉莫斯之舞

在 kotlin 1.4 中,他们增加了定义我们自己的功能接口的能力fun interface Function<in T, out R> {&nbsp; &nbsp; operator fun invoke(p: T): R}fun test(loader: Function<String, Int>) {&nbsp; &nbsp; val result = loader("5")}
随时随地看视频慕课网APP

相关分类

Java
我要回答