如何在Java中轻松使用Kotlin渠道生产者?

作为开发新API的一部分,我正在学习使用Kotlin。 最初我希望Kotlin API能在Java(Android)项目中使用,但从长远来看,我希望完全采用Kotlin。

作为改进长期运行过程的一部分,我想使用协程。 具体来说, kotlinx.courtines包中的渠道生产者 。

例如:

 fun exampleProducer() = produce { send("Hello") delay(1000) send("World") } 

在Java中使用这个最好的方法是什么? 我可以为Kotlin和/或Java添加临时的“帮手”功能。

2 Solutions collect form web for “如何在Java中轻松使用Kotlin渠道生产者?”

与Java互操作的渠道最简单的方法是通过反应流。 Rx和Project Reactor都支持开箱即用。 例如,将kotlinx-coroutines-rx2添加到dependsicies,您将能够使用rxFlowable构建器:

 fun exampleFlowable() = rxFlowable<String> { send("Hello") delay(1000) send("World") } 

这个函数返回一个Flowable的实例,这个实例是专门为了Java的易用Flowable而设计的,例如,你可以用Java来实现:

 exampleFlowable().subscribe(t -> System.out.print(t)); 

目前,假设使用了Java 8并且lambda可用,我依赖于Kotlin中定义的帮助函数,它允许传递回调消耗传入的结果。

Kotlin的帮手方法:

 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说明可以在这个答案中找到 。

  • 我怎样才能用Kotlin DSL为Gradle配置Kotlin协程?
  • 使用单元测试支持清理Kotlin中的协程
  • 监制器内的生产者
  • Kotlin协同程序不等待完成
  • 当使用kotlin协同程序时,如何对一个调用暂停function的函数进行unit testing?
  • unit testing使用kotlin协同程序的翻新调用
  • 生产中可以使用“实验”Kotlin协同程序吗?
  • 单元测试Kotlin协同程序延迟
  • 在Android服务中的Kotlin协程
  • 如何实施一个有限的调用与改造阻塞客户端和协程
  • Kotlin并行协程
  • Kotlin language will be the best programming language for Android.