当前位置: 首页 > 面试题库 >

Kotlin功能接口Java兼容性

明阳旭
2023-03-14
问题内容

我在kotlin上开发应用程序,但需要良好的Java支持。我发现的问题是kotlin的功能。

这是我以前做的

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

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

我尝试使用Java的Supplier或Function接口,但发现Kotlin开发人员更加困难,因为您必须提供更多的变量类型和null检查,并与通用参数一起使用,这很痛苦。

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

@FunctionalInterface
interface Function<in T, out R>: Function<R> {
    operator fun invoke(p: T): R
}

和功能

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

但这与默认的Java Function接口相同

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


问题答案:

在Kotlin 1.4中,他们增加了定义这样自己的功能接口的功能

fun interface Function<in T, out R> {

    operator fun invoke(p: T): R
}

fun test(loader: Function<String, Int>) {
    val result = loader("5")
}


 类似资料:
  • 问题内容: 我正在尝试建立一个实现和的类。这两个接口都定义了方法,但是返回类型不同: K的类型擦除导致这两个方法签名冲突。我不能拥有它们中的一个,因为它是一个无效的覆盖,并且我不能拥有两个,因为它们具有相同的签名。有什么方法可以使这两个接口共存? 问题答案: 我认为在这种特殊情况下是不可能的。如果两个类都返回了对象类型,那么您将有机会,但是由于您混合了基本类型和对象类型,因此没有兼容的类型同时支持

  • 我想用JavaFXPorts和静态编程语言代码构建一个JavaFXAndroid应用。在JavaFXPorts项目中可以使用静态编程语言吗?下面是我的示例Gradle(版本5.6.4)项目: 注意:这段代码的问题是Kotlin运行时。。。有没有办法把所有东西捆绑在可执行Jar和Apk中? ./settings.gradle.kts /建造。格雷德尔。kts /应用/构建。格雷德尔。kts ./ap

  • 和往常一样,我在浏览JDK8源代码时发现了非常有趣的代码: 问题是:如何可能是的实例?因为它们处于不同的层级。 我做了类似的代码片段来测试转换:

  • 为了丰富运营体验,让开发者更好的体验积分商城功能,兑吧提支持更多的扩展功能 . 支持的扩展功能包含: 1. 游客用户唤醒登录 2. 自有虚拟商品充值 接口说明 充值接口API文档 通知接口API文档 3.加积分接口 接口说明 API文档 4.免登URL自定义参数 dcustom参数 transfer参数 signKeys参数 5. 会员等级功能 6.前置商品查询接口 7. 【秒杀商品】前置查询接口

  • 开发者只需对接完成免登接口、扣积分接口和兑换结果通知接口三个必选接口即可实现商城的基本功能,包括兑换商品,发布积分商城活动等 1.免登录地址接口 用户通过服务端生成的免登录url跳转到积分商城 接口说明 API文档 常见问题 2.扣积分接口 用户点击马上兑换,兑吧向开发者发起兑换请求,开发者进行json响应 接口说明 API文档 常见问题 3.兑换结果通知接口 兑吧把订单的状态通知给开发者,开发者

  • 主要内容:实例,实例,函数重写,实例Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现: interface MyInterface { fun bar() // 未实现 fun foo() { //已实现 // 可选的方法体 println("foo") } } 实现接口 一个类或者对象可以实现一个或多个接口。 class Child : MyInterface { overri