当我想将 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 的一些基本概念而存在缺陷,请道歉。