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