我们在使用Java调用Kotlin协程方法时,方法参数在Kotlin端看到只有一个,但是通过Java调用时,要求传入一个Continuation回调类,而这个类Java中并不存在,所以我们可以在Kotlin侧新建一个抽象类继承自Continuation,即可由Java端调用。
1、在Kotlin侧新建一个Continuation类:
abstract class Continuation<in T> : kotlin.coroutines.Continuation<T> {
abstract fun resume(value: T)
abstract fun resumeWithException(exception: Throwable)
override fun resumeWith(result: Result<T>) = result.fold(::resume, ::resumeWithException)
}
2、在Java侧调用:
coroutineFun(firstParam , new Continuation<String>() {
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resume(String value) {
//拿数据
}
@Override
public void resumeWithException(@NotNull Throwable throwable) {
//处理异常
}
});
yeah~~