如何在Java中轻松使用Kotlin渠道生产者?
作为开发新API的一部分,我正在学习使用Kotlin。 最初我希望Kotlin API能在Java(Android)项目中使用,但从长远来看,我希望完全采用Kotlin。
作为改进长期运行过程的一部分,我想使用协程。 具体来说, kotlinx.courtines
包中的渠道生产者 。
例如:
fun exampleProducer() = produce { send("Hello") delay(1000) send("World") }
在Java中使用这个最好的方法是什么? 我可以为Kotlin和/或Java添加临时的“帮手”功能。
与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
说明可以在这个答案中找到 。
- 无法获得SupportMapFragment返回任何东西…似乎总是为空
- 在ConstraintLayout中使用组来侦听多个视图上的点击事件
- Android gradle构建在':app:mergeDebugResources'上突然失败,没有错误消息
- 从Kotlin Android中的DatePickerDialog获取日期
- Kotlin的房间数据库有什么问题?
- Android上的Kotlin:无法找到主合并清单。 什么是造成这个错误?
- 当前选择的Java调试器不支持“Kotlin Line Breakpoints”类型的断点
- 未解决的参考
- Android数据绑定与Kotlin,BaseObservable和一个自定义委托