Kotlin中的异步匿名函数? (lambdaexpression式)
我正在做一个列表查看什么时候点击调用函数。
I want to get function is async or sync
。
阻止什么时候是异步的。
甚至我想知道how attach async mark to kotlin lambda expression
。
class FunctionCaller_Content(text: List, val function: List 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
,但除了使用List
之外,您不能在同一个列表中同时使用挂起和非挂起function。 我建议使用两个单独的列表。 另一个解决方案是使用“代数数据types”:
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, val function: List? = 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库,可以做无http证书validation的httpS连接(如curl –insecure)
- 创建一个带有辅助构造函数的Parcelable类,该构造函数在Kotlin中将参数列表作为参数
- kotlin android – 用Builder模式和Java 8 lambda定制对话框
- 错误:Jack需要支持Java 8语言功能。 启用插件或删除sourceCompatibility JavaVersion.VERSION_1_8
- 如何在kotlin中编写含泛型的lambdas?
- java.lang.NoClassDefFoundError $$ intern $ forEach $ lambda $ 1在Kotlin中
- Kotlin lambda有几个参数
- 为什么Kotlin不能推断下面的lambda参数(在Java – > Kotlin转换之后)?
- 在Kotlin中使用功能类型的功能接口
- 在Kotlin中可变参数的lambdatypes?
- Kotlin:使用lambda代替功能界面?