Выбор ответа Senior Java-интероп обновлено
Как вызвать suspend-функцию из Java
Вопрос
Как удобнее всего дать Java-коду доступ к suspend fun load(): User?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Обёртка на Kotlin с CompletableFuture через scope.future. Для Java suspend-функция это метод с последним параметром Continuation и возвращаемым Object, вызывать её руками неудобно и опасно.
Варианты ответа
- Вызвать напрямую: Java поддерживает suspend через
await - Пометить функцию
@JvmStatic, и Java получит обычный метод - Обёртка на Kotlin с
CompletableFutureчерезscope.futureправильный ответ - Использовать
@JvmOverloads, он скроет параметр Continuation
Разбор
Для Java suspend-функция это метод с последним параметром Continuation и возвращаемым Object, вызывать её руками неудобно и опасно. Обычно добавляют обёртку на Kotlin: fun loadAsync(): CompletableFuture<User> = scope.future { load() } (билдер future из kotlinx-coroutines). Java работает с привычным CompletableFuture. @JvmStatic и @JvmOverloads к suspend отношения не имеют.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.