Всякий раз, когда я пытаюсь выполнить переопределенный метод приостановки, который определен в другом модуле, он завершается с NoSuchMethodError
(см. Более подробную информацию ниже).
Вот что я делаю именно:
Iесть два модуля app и lib .
lib здесь у меня есть интерфейс (OtherModuleInterface
) с методом приостановки (test
).
app здесь я определил реализацию (OtherModuleImpl
) этого интерфейса.
Если я назову его так:
val myOtherModuleObject : OtherModuleImpl = OtherModuleImpl()
runBlocking { myOtherModuleObject.test() }
Тогда он работает нормально.
Если я использую OtherModuleInterface
в качестве типа значения:
val myOtherModuleObject : OtherModuleInterface = OtherModuleImpl()
runBlocking { myOtherModuleObject.test() }
Сбой с исключением:
java.lang.NoSuchMethodError: com.example.lib.OtherModuleInterface.test (Lkotlin / coroutines / экспериментальный / продолжение;) Ljava / lang / Object .
Если я добавлю и интерфейс, и реализацию втот же модуль работает нормально:
val mySameModuleObject : SameModuleInterface = SameModuleImpl()
runBlocking { mySameModuleObject.test() }
Вы можете проверить код здесь, чтобы увидеть всю конфигурацию проекта: https://github.com/rjuszczyk/kotlin-coroutines-problem и запустить ExampleUnitTest
, чтобы увидеть ошибку.