如何从 Java 7 调用 Kotlin 挂起协程函数
2022-09-02 09:52:38
我试图从Java 7调用Kotlin函数。我正在使用协程,这个调用的函数正在挂起,例如:
suspend fun suspendingFunction(): Boolean {
return async { longRunningFunction() }.await()
}
suspend fun longRunningFunction() : Boolean {
delay(400)
return true
}
我在版本0.25.3中使用协程,我可以通过将实例作为暂停函数的参数来模拟简单的Java回调风格,例如Continuation<U>
CoroutinesKt.suspendingFunction(new Continuation<Boolean>() {
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resume(Boolean value) {
doSomethingWithResult(value);
}
@Override
public void resumeWithException(@NotNull Throwable throwable) {
handleException(throwable);
}
});
但是,在更新到完全稳定的1.0.1版本后,我认为这不再可能。假设挂起函数的更新版本如下所示:
suspend fun suspendingFunction(): Boolean {
return GlobalScope.async { longRunningFunction() }.await()
}
Continuation<U>
现在使用类,它似乎无法从Java中使用(这是有道理的,因为它是内联类)。我试图使用一些来自协程的子类,但它们都是内部的或私有的。Result
Continuation
我知道通常建议将协程转换为CompletableFuture
,但我使用的是Android,这意味着只有Java 7。另一方面,简单太愚蠢了,因为我不想定期检查函数是否完成 - 我只想在完成后被调用。我真的很想避免添加新的库或许多其他类/方法。Future
有没有简单的方法直接从Java 7调用挂起函数?
由于Kotlin试图与Java非常可互操作,我想会有一些简单的方法来做到这一点,但我还没有找到它。