Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在映射中存储函数(或lambda),然后执行它?_Android_Kotlin - Fatal编程技术网

Android 如何在映射中存储函数(或lambda),然后执行它?

Android 如何在映射中存储函数(或lambda),然后执行它?,android,kotlin,Android,Kotlin,我想要一个可变映射,它映射一些逻辑上的类。它主要用于对从后端到达的一些对象做出反应。例如 class ViewUpdater(val view: RecordingActivity) { val map: MutableMap<KClassifier, Function<*>> = mutableMapOf() init { map[Entity1::class] = { m: Entity -> view.

我想要一个可变映射,它映射一些逻辑上的类。它主要用于对从后端到达的一些对象做出反应。例如

class ViewUpdater(val view: RecordingActivity) {
    val map: MutableMap<KClassifier, Function<*>> = mutableMapOf()

    init {
        map[Entity1::class] = { m: Entity ->
            view.entity1.text = (m as Entity1).value1.toString()
        }
        map[Entity2::class] = { m: Entity ->
            view.entity2.text = (m as Entity2).value2.toString()
        }
}
提前感谢。

您可以使用:

MutableMap < KClass<Entity>, (Entity) -> Unit >  = mutableMapOf()
如果subscribe没有实体接收方:

.subscribe{ map[it::class]?.invoke(it) }

您正在查找
invoke()
运算符。在您的情况下,您可以简单地执行以下操作:

.subscribe { map[it::class]?.invoke(it) }
请注意,如果没有为特定的
实体
子类映射函数,则可能返回null。或者,如果您的目的是将
实体
的特定子类映射到
字符串
,我可能建议使用
when
语句作为可读性扩展函数。例如:

fun Entity.toSpecialString() : String = when(this) {
    is Entity1 -> value1.toString()
    is Entity2 -> value2.toString()
    else -> "unspecified"
}
然后你可以做:

.subscribe { it.toSpecialString() }
.subscribe{ map[it::class]?.invoke(it) }
.subscribe { map[it::class]?.invoke(it) }
fun Entity.toSpecialString() : String = when(this) {
    is Entity1 -> value1.toString()
    is Entity2 -> value2.toString()
    else -> "unspecified"
}
.subscribe { it.toSpecialString() }