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