【发布时间】:2020-06-21 14:46:45
【问题描述】:
当我想将 Kotlin Flows 与普通回调一起使用时,我一直在寻找合适的解决方案或最佳实践。我的用例是我编写了一个在内部使用 Kotlin Flow 的 kotlin 库,并且我必须假设用户将使用 Java。所以我认为最好的解决方案是为我的流方法重载一个基本的回调接口,并在collect 中调用它,如下所示:
class KotlinClass {
interface Callback {
fun onResult(result: Int)
}
private fun foo() = flow {
for (i in 1..3) {
emit(i)
}
}
fun bar(callback: Callback) {
runBlocking {
foo().collect { callback.onResult(it) }
}
}
private fun main() {
bar(object : Callback {
override fun onResult(result: Int) {
TODO("Not yet implemented")
}
})
}
在我的 Java 应用程序中,我可以像这样简单地使用它:
public class JavaClass {
public void main() {
KotlinClass libraryClass = new KotlinClass();
libraryClass.bar(new KotlinClass.Callback() {
@Override
public void onResult(int result) {
// TODO("Not yet implemented")
}
});
}
}
我不确定要走什么路,因为我希望我的 Kotlin 库使用 Flows 以良好的方式用于 Java 和 Kotlin。
我遇到了callbackFlow,但这似乎只是当我想让它称之为 flow-ify 一个基于回调的 API 时?因为我对 Kotlin 和 Flows 很陌生,如果我的问题因缺少 kotlin 的一些基本概念而存在缺陷,请道歉。
【问题讨论】:
标签: java kotlin kotlin-coroutines kotlin-flow