当我想将 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")
}
})
}
Run Code Online (Sandbox Code Playgroud)
在我的 Java 应用程序中,我可以像这样简单地使用它:
public class JavaClass {
public void main() {
KotlinClass libraryClass …Run Code Online (Sandbox Code Playgroud)