Android开发:如何从Java代码正确调用带回调参数的Kotlin方法
Android开发:如何从Java代码正确调用带回调参数的Kotlin方法
嗨,我来帮你搞定这个编译问题~你的Kotlin方法syncBHGeneralPacket需要两个参数,但你目前的Java代码只传了第一个zephyrDataRequest,漏掉了回调参数,这就是编译失败的原因。
在Kotlin里定义的(routeData: FuelJson) -> Unit这种函数类型,到了Java里会被转换成对应的SAM(单抽象方法)接口Function1<FuelJson, Unit>。咱们只需要在Java调用时补上这个回调参数就行,用lambda写法最简洁:
apiHandler = new ApiHandler(getApplicationContext()); apiHandler.syncBHGeneralPacket(zephyrDataRequest, fuelJson -> { // 这里写请求成功后要执行的逻辑,比如处理返回的FuelJson数据 Log.d("YourJavaTag", "请求成功,返回数据:" + fuelJson.toString()); return Unit.INSTANCE; // 注意:Kotlin的Unit在Java里必须显式返回这个单例对象 });
如果你的项目需要兼容Java 8以前的版本,也可以用匿名内部类的方式实现这个接口:
apiHandler.syncBHGeneralPacket(zephyrDataRequest, new Function1<FuelJson, Unit>() { @Override public Unit invoke(FuelJson fuelJson) { // 处理返回数据的逻辑 Log.d("YourJavaTag", "回调收到数据:" + fuelJson); return Unit.INSTANCE; } });
重点提醒一下:因为Kotlin的Unit是一个特殊的单例类型,Java里实现这个回调时必须返回Unit.INSTANCE,哪怕你不需要返回值也得写,不然编译器会报错哦。
这样修改之后,你的Java代码就能正确调用Kotlin的方法,并且在请求成功时触发回调逻辑啦~
备注:内容来源于stack exchange,提问作者bircastri
相关产品推荐
相关产品推荐

