gpt4 book ai didi

android - Kotlin 中的异步匿名函数? ( lambda 表达式)

转载 作者:行者123 更新时间:2023-12-02 12:04:27 24 4
gpt4 key购买 nike

我正在制作一个 ListView (android),点击时调用什么函数。

我想获取函数是异步还是同步

异步时阻止。

甚至我想知道如何将异步标记附加到 kotlin lambda 表达式

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
}
})

关于android - Kotlin 中的异步匿名函数? ( lambda 表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47616724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com