Как вызвать suspend функцию библиотеки Kotlin из кода Java?
Ситуация
Есть корпоративная библиотека на Kotlin. В библиотеке есть основной метод, который в процессе работы обращается к suspend fun. Метод принимает только один аргумент и возвращает Boolean. Библиотекой должны пользоваться разработчики на Java, соответственно, вызывать из Java-кода.
Основные асинхронные вызовы - это сетевое взаимодействие с помощью Ktor.
В данный момент пишу шаблон проекта для разработчиков-джавистов и пытаюсь сам использовать библиотеку из Java-кода.
В чем проблема
При вызове метода из кода Java он начинает требовать второй аргумент - континуацию и возвращать не Boolean, а Object.
В виде кода выгляит примерно так:
Kotlin-библиотека:
class MainClass(){ // Конструктор класса принимает некоторые агрументы, но это можно опустить в данной ситуации
// Какие-то переменные, вспомогательные методы
private suspend fun getResults(): Array<Result> { // Result - просто data class, ничего особенного.
// Некоторые асинхронные вызовы
}
suspend fun mainFun(arg: ClassForParser): Boolean { // Принимает только один аргумент - класс, в который будет парситься JSON-строка в процессе
// Код метода
// Вызов getResults()
return result
}
}
Вызов из java:
public class SomeClass() {
public static void main(String[] args) throws IOException {
// Некоторый код, который корректно работает: собирает и вычисляет данные, компанует их перед отправкой в основной класс
MainClass mainClass = new MainClass();
Boolean result = mainClass.mainFun(ClassForParsing, Continuation) // Появилась континуация как второй аргумент.
//Метод теперь возвращает Object, а не Boolean
}
}
Что удалось на данный момент.
Удалось запустить метод, но вместо Boolean возвращает объект kotlin.coroutines.intrinsics.CoroutineSingletons
Собственно, вопрос
Что нужно сделать, чтобы метод запустился так, как я его задумывал? Где в моих знаниях был пробел, из-за которого такое получилось?
Решение, которое не подойдет. Переписать либу на Java. Я не джавист, либа почти готова, а дедлайн близко. На это нет времени. Проще будет джавистов научить пользоваться либой на Kotlin.
Спасибо.