Java Kotlin中自有SDK-async方法API的体系结构
我们正在为我们的产品构建一个公共SDK。它是用Kotlin构建的,在内部我们使用协同程序。然而,我们希望发布一个可以从JAVA中使用的API,这就是为什么不能提供可挂起的函数作为公共API的原因 我们还可以,如果Java的可用性不如Kotlin那么舒适,这是意料之中的 例如,我们正在寻找以下异步方法的返回类型:Java Kotlin中自有SDK-async方法API的体系结构,java,android,asynchronous,kotlin,kotlin-interop,Java,Android,Asynchronous,Kotlin,Kotlin Interop,我们正在为我们的产品构建一个公共SDK。它是用Kotlin构建的,在内部我们使用协同程序。然而,我们希望发布一个可以从JAVA中使用的API,这就是为什么不能提供可挂起的函数作为公共API的原因 我们还可以,如果Java的可用性不如Kotlin那么舒适,这是意料之中的 例如,我们正在寻找以下异步方法的返回类型: class Sdk { fun getPlace(): ___ } 我们考虑的事项: 使用RXJava作为接口的接口。我们不喜欢这种解决方案,Rx非常复杂,我们希望尽可能少地添
class Sdk {
fun getPlace(): ___
}
我们考虑的事项:
sdk.getPlace().await()
非常可用sdk.getPlace().observe(观察{onsuccess(data:Place){}onFailure(e:Throwable){}})
;我们将为等待提供扩展功能我不确定这个问题是否有具体的答案。因此,以下只是我的观点。你可以同意也可以不同意。有很多不同的方法来实现OP的要求 就个人而言,我不会在LiveData中包含对Rx或架构组件的任何依赖性。虽然很多现代应用程序都使用这些依赖项,但我认为在SDK中有很多第三方依赖项不是一个好主意。其他开发人员可能会覆盖它们,从而导致不可预测的结果 我看到两种解决方案:
如果我是你,我也会考虑为Java/Kotlin用户公开不同的API方法。Kotlin用户将感谢您提供了一种更干净的方法,例如协同路由,来调用SDK的方法。您是否了解?它有一些Java特性,可以移植到早期的Java版本。那么google services的
Task
呢?在Kotlin中,由于您的建议,您可以在其上使用lambda,也可以只使用task.getResult()
。我们尝试了两种方法——一种是回调方法,另一种是kotlin的suspend方法。但随着时间的推移,情况变得相当混乱。目前,我们已经实现了所有的同步功能,当我们的代码在UI线程上运行时,我们会抛出一个异常。很抱歉,结果是一团糟。好吧,至少你们知道这是行不通的:)我认为分享你们的经验是值得的。你介意回答你自己的问题吗?我认为这对其他开发者来说会很有趣。