簡體   English   中英

Kotlin 反射與協程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM