每当我尝试执行其他模块中定义的重写的挂起方法时,都会失败并显示NoSuchMethodError
(请参见下面的更多详细信息)。
这正是我正在做的事情:
我有两个模块 app 和 lib 。
lib 在这里,我有一个带有暂挂方法(OtherModuleInterface
)的接口(test
)。
应用,这里我已经定义了该界面的实现(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
来查看错误。