作为开发新API的一部分,我正在学习使用Kotlin。最初,我希望在Java (Android)项目中使用Kotlin API,但从长远来看,我希望完全采用Kotlin。
作为改进长期运行过程的实现的一部分,我想使用协同机制。具体来说,是来自于频道产生器包的kotlinx.coroutines。
例如:
fun exampleProducer() = produce {
send("Hello")
delay(1000)
send("World")
}在Java中使用这个的最好方法是什么?我不介意向Kotlin和/或Java中添加临时的‘助手’函数。
发布于 2017-11-11 10:32:33
与Java互操作通道的最简单方法是通过反应流。Rx和Project反应堆都有箱外支撑.例如,将kotlinx-coroutines-rx2添加到您的依赖项中,您将能够使用rxFlowable构建器:
fun exampleFlowable() = rxFlowable<String> {
send("Hello")
delay(1000)
send("World")
}此函数返回Flowable的一个实例,该实例是为便于使用而专门设计的,例如,您可以在Java中这样做:
exampleFlowable().subscribe(t -> System.out.print(t));发布于 2017-11-10 17:43:37
目前,假设使用了Java 8并提供了lambda,我依赖于Kotlin中定义的帮助函数,它允许传递回调来使用传入的结果。
Kotlin中的helper方法:
fun exampleProducerCallback( callback: (String) -> Unit ) = runBlocking {
exampleProducer().consumeEach { callback( it ) }
}然后在Java中将其用作:
ApiKt.exampleProducerCallback( text -> {
System.out.print( text );
return Unit.INSTANCE; // Needed since there is no void in Kotlin.
} );解释为什么需要return Unit.INSTANCE,可以在这个答案中找到。
https://stackoverflow.com/questions/47228307
复制相似问题