Kotlin中的异步匿名函数? (lambda表达式)
我正在做一个listview什么时候点击调用函数。Kotlin中的异步匿名函数? (lambda表达式)
和I want to get function is async or sync
。
当它是异步时阻止。我想知道how attach async mark to kotlin lambda expression
。
class FunctionCaller_Content(text: List<String>, val function: List< /*suspend? @async? */
( () -> Unit )?
>? = null)
/* I want both of async, sync function. */
{
fun isAsnyc(order: Int): Boolean
= // how to get this lambda expression{function?.get(order)} is async?
fun call(callerActivity: Activity, order: Int) {
val fun = function?.get(order)
fun()
if(isAsync(fun))
/* block click for async func */
}
}
和用法。
FunctionCaller_Content(listOf("Click to Toast1", "Click to Nothing"), listOf(
{
Toast.makeText(this, "clicked", Toast.LENGTH_SHORT)
},
{
/*if async lambda expression, how can i do?*/
})
回答:
你可以有List<suspend() -> Unit>
,但你不能兼得暂停与非暂停在同一列表的功能,除非使用List<Any>
。我建议使用两个单独的列表。另一种解决方案是使用“代数数据类型”:
sealed class SyncOrAsync // can add methods here class Sync(val f:() -> Unit) : SyncOrAsync
class Async(val f: suspend() -> Unit) : SyncOrAsync
class FunctionCaller_Content(text: List<String>,
val function: List<SyncOrAsync>? = null)
{
fun call(callerActivity: Activity, order: Int) {
val fun = function?.get(order)
if(fun is Async)
/* block click for async func */
}
}
FunctionCaller_Content(
listOf("Click to Toast1", "Click to Nothing"),
listOf(Sync {
Toast.makeText(this, "clicked", Toast.LENGTH_SHORT)
},
Async {
// your async code
})
但如果你只是打算无论如何要阻止,我只想用List<() -> Unit>
和
listOf({ Toast.makeText(this, "clicked", Toast.LENGTH_SHORT)
},
{
runBlocking {
// your async code
}
})
以上是 Kotlin中的异步匿名函数? (lambda表达式) 的全部内容, 来源链接: utcz.com/qa/260102.html