首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中轻松地使用Kotlin频道生产者?

如何在Java中轻松地使用Kotlin频道生产者?
EN

Stack Overflow用户
提问于 2017-11-10 17:36:53
回答 2查看 1.1K关注 0票数 2

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

作为改进长期运行过程的实现的一部分,我想使用协同机制。具体来说,是来自于频道产生器包的kotlinx.coroutines

例如:

代码语言:javascript
复制
fun exampleProducer() = produce {
    send("Hello")
    delay(1000)
    send("World")
}

在Java中使用这个的最好方法是什么?我不介意向Kotlin和/或Java中添加临时的‘助手’函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-11 10:32:33

与Java互操作通道的最简单方法是通过反应流。Rx和Project反应堆都有箱外支撑.例如,将kotlinx-coroutines-rx2添加到您的依赖项中,您将能够使用rxFlowable构建器:

代码语言:javascript
复制
fun exampleFlowable() = rxFlowable<String> {
    send("Hello")
    delay(1000)
    send("World")
}

此函数返回Flowable的一个实例,该实例是为便于使用而专门设计的,例如,您可以在Java中这样做:

代码语言:javascript
复制
exampleFlowable().subscribe(t -> System.out.print(t));
票数 2
EN

Stack Overflow用户

发布于 2017-11-10 17:43:37

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

Kotlin中的helper方法:

代码语言:javascript
复制
fun exampleProducerCallback( callback: (String) -> Unit ) = runBlocking {
    exampleProducer().consumeEach { callback( it ) }
}

然后在Java中将其用作:

代码语言:javascript
复制
ApiKt.exampleProducerCallback( text -> {
    System.out.print( text );
    return Unit.INSTANCE; // Needed since there is no void in Kotlin.
} );

解释为什么需要return Unit.INSTANCE可以在这个答案中找到

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47228307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档