首页 > 解决方案 > kotlin,协程,NoSuchMethodError 从其他模块调用覆盖的挂​​起函数时

问题描述

每当我尝试执行在其他模块中定义的覆盖挂起方法时,它都会失败NoSuchMethodError(请参阅下面的更多详细信息)。

这就是我正在做的事情:

我有两个模块applib

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/experimental/Continuation;)Ljava/lang/Object

如果我将接口和实现都放在同一个模块中,它可以正常工作:

val mySameModuleObject : SameModuleInterface = SameModuleImpl()
    runBlocking { mySameModuleObject.test() }

您可以在此处查看代码以查看整个项目配置: https ://github.com/rjuszczyk/kotlin-coroutines-problem 并运行ExampleUnitTest以查看错误。

标签: androidkotlinkotlinx.coroutines

解决方案


推荐阅读