如何从Java 7中调用Kotlin暂停协程功能

如何从Java 7中调用Kotlin暂停协程功能,第1张

概述我正在尝试从Java 7调用Kotlin函数.我正在使用协同程序,这个被调用的函数正在挂起,例如:suspend fun suspendingFunction(): Boolean { return async { longRunningFunction() }.await() } suspend fun longRunningFunction()

我正在尝试从Java 7调用Kotlin函数.我正在使用协同程序,这个被调用的函数正在挂起,例如:

suspend fun suspendingFunction(): Boolean {    return async { longRunningFunction() }.await()}suspend fun longRunningFunction() : Boolean {    delay(400)    return true}

我在版本0.25.3中使用协同程序,我可以通过传递Continuation< U>来模拟简单的Java回调样式. instance作为暂停函数的参数,例如

CoroutinesKt.suspendingFunction(new Continuation

但是,在更新到完全稳定的1.0.1版本后,我认为它已不再可能.假设暂停函数的更新版本如下所示:

suspend fun suspendingFunction(): Boolean {    return GlobalScope.async { longRunningFunction() }.await()}

延续< U>现在使用Result类,它似乎无法从Java中使用(这是有意义的,因为它是内联类).我试图从协同程序使用Continuation的一些子类,但它们都是内部或私有的.

我知道通常它是advised to transform coroutine to CompletableFuture,但我在AndroID上,这意味着只有Java 7.另一方面,简单的未来太愚蠢了,因为我不想定期检查功能是否完成 – 我只想在完成时调用它.我真的想避免添加新的库或许多其他类/方法.

有没有简单的方法直接从Java 7调用挂起函数?

由于Kotlin试图与Java非常互 *** 作,我想可以有一些简单的方法来做到这一点,但我还没有找到它.

最佳答案根据您的环境,您有多种选择.

>如果在项目中使用RxJava2,则模块kotlinx-coroutines-rx2具有在协同程序和Rx数据类型之间来回转换的实用程序函数.

suspend fun sayHello(): String {    delay(1000)    return "Hi there"}fun sayHelloSingle(): Single

>否则,您可以添加一个与旧版本的定义匹配的新Continuation类,并且在Java端也很有用.

例子(Kotlin方面)

abstract class Continuation

示例(Java端)

sayHello(new Continuation
总结

以上是内存溢出为你收集整理的如何从Java 7中调用Kotlin暂停协程功能全部内容,希望文章能够帮你解决如何从Java 7中调用Kotlin暂停协程功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1139618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)