val specials:Map<String, (Any)->Unit> = mapOf(
"callMe1" to {asParam1()},
"callMe2" to {asParam2()}
)
fun asParam1(num:Int) {
println(num)
}
fun asParam2(text:String) {
println(text)
}
fun caller() {
specials["callMe1"]?.invoke("print me")
specials["callMe2"]?.invoke(123)
}
fun main(args: Array<String>) {
caller()
}
我的要求很简单,我想功能asParam1
和asParam2
保存为变量specials
的值。稍后通过从Map
获取值来调用它。如何将函数引用保存为Map类型的值,并在Kotlin中稍后使用参数调用它?
但是,编译器不喜欢它:
Error:(1, 40) Type inference failed. Expected type mismatch: inferred type is Map Unit> but Map Unit> was expected
Error:(1, 69) No value passed for parameter num
Error:(1, 96) No value passed for parameter text
这个任务是弱类型语言很简单,我不知道如何在科特林做。任何帮助将受到欢迎。谢谢!
如果你的'Map'没有改变,使用'when'也是可以的。 – BakaWaii