Kotlin反射在更新到1.6.10版本后无法返回函数



我在Android应用程序的一个类中声明了以下kotlin属性:

private val updateRef: KFunction<*> by lazy {
dao::class.functions.find {it.name.equals("update", true)}!!
}

其中dao是对Room dao接口的引用。由于我已经将kotlin更新到1.6.10版本,它不再工作,每次我尝试执行上面的代码时都会抛出以下wierd异常。当我使用安卓工作室的评估工具评估表达式时,也会引发同样的异常

";Java方法public open suspend fun count((的解析序列不正确:kotlin。在其中定义的Int.kfi.lorikeetmobile.db.dao.TablePriorityDao_Impl[JavaMethodDescriptor@d45ec9a]";。

其中count((是在DAO接口中声明的挂起方法。但我在项目中的每个DAO类和不同的方法中都会遇到这种情况,所以我认为该方法与这里的真正问题无关。。。我搞不清楚发生了什么事。

在更新之前,我没有任何问题。请帮忙。

最后,我发现kotlin-reflect的最后一个版本(在我的案例中是1.6.10版(没有保持对扩展Java超类的kotlin类的向后兼容性。使用Kotlin反射来访问由Kotlin类扩展的Java超类的成员属性或函数将失败,如我的问题中所述。如果超级类也是Kotlin类,它也可以正常工作。对我来说,这是一个应该解决的错误。

最新更新