Я искал подходящее решение или лучшую практику, когда хочу использовать Kotlin Потоки с обычными обратными вызовами. Мой пример использования - я пишу библиотеку kotlin, которая использует Kotlin Flow для внутреннего использования, и я должен предположить, что пользователи будут использовать Java, например. Поэтому я подумал, что лучшим решением является перегрузка базового интерфейса обратного вызова c для моего метода потока и вызов его в 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")
}
});
}
}
Я не уверен, что путь к go, потому что я хотел бы иметь мою библиотеку Kotlin, которая использует потоки, пригодные для использования в хорошем качестве для Java и Kotlin.
Я сталкивался с callbackFlow
, но, похоже, это произойдет только в том случае, если я захочу, чтобы он назывался потоковым, если это API на основе обратного вызова? Потому что я новичок в Kotlin и Flows, пожалуйста, извинитесь, если мой вопрос неверен из-за отсутствия некоторых базовых c концепций kotlin.