kotlin, сопрограммы, NoSuchMethodError при вызове переопределенной приостановленной функции из другого модуля - PullRequest
0 голосов
/ 27 августа 2018

Всякий раз, когда я пытаюсь выполнить переопределенный метод приостановки, который определен в другом модуле, он завершается с 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, чтобы увидеть ошибку.

...