[英]Kotlin reflection with coroutines
我需要通過反射調用方法suspend fun insert(e: T)
,聲明如下:
interface IMutableDao<T> {
@Insert(onConflict = OnConflictStrategy.ABORT)
suspend fun insert(e: T)
@Update
suspend fun update(e: T)
@Delete
suspend fun delete(e: T)
}
我試過:
val insertFun = IMutableDao::class.functions.find {
it.name.equals("insert", true)
}
insertFun!!.callSuspend(dao, o)
但我得到了異常“ Callable expects 3 arguments, but 2 were provided.
”。 我不明白第三個論點來自哪里。
更新
我發現了問題。 第三個是一個 Continuation 實例。 有誰知道在那里通過什么? 我找不到任何合適的實例。
更新 2
我找到的解決方法是在 function 中創建一個臨時 class 我稱之為暫停的 function ,如下所示:
val c = object : Continuation<Unit> {
override val context: CoroutineContext
get() = EmptyCoroutineContext
override fun resumeWith(result: Result<Unit>) {
}
}
您缺少“this”參數,即 object 應該調用該方法。
它應該是該方法的第一個參數。
您可以使用帶有 Unit 作為類型的suspendCoroutine並使用延續實例。
GlobalScope.launch {
suspendCoroutine<Unit> { continuation ->
insertFun!!.callSuspend(dao, o, continuation)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.