Можно ли сопоставить функцию более высокого порядка в котлине с строкой

Я должен выполнить асинхронный запрос, а затем сообщить результат слушателям.

fun connectToTopic(topic:String, body:(topic:String, data : ByteArray ) -> Void){ topicCallbackMap.put(topic, body) // is this possible??? } 

Я хочу создать карту из «темы» в функцию более высокого порядка, чтобы я мог вызвать конкретную функцию более высокого порядка для определенной темы, например

 private val topicCallbackMap: Map<String, body:(topic:String, data : ByteArray ) -> Void> 

Вышеупомянутый неверный код, просто хотел дать сущность.

То, что я хочу, может быть легко достигнуто с помощью прослушивателя интерфейса, но я хотел знать, возможно ли это в Котлине. Спасибо.

Возможно. В коде есть только некоторые синтаксические ошибки. И обратите внимание, что вам нужна MutableMap , чтобы поместить ценность в карту.

 private val topicCallbackMap = mutableMapOf<String, (String, ByteArray) -> Unit>() fun connectToTopic(topic:String, body: (String, ByteArray) -> Unit) { topicCallbackMap.put(topic, body) //OR topicCallbackMap[topic] = body } 

да это возможно:

 val functionMap: Map<String, (Int) -> Int> = mapOf("a2" to { a: Int -> a * 2 }, "a3" to {a: Int -> a * 3} ) fun execute(a: Int, myBlock: (Int) -> Int) { println( myBlock(a) ) } 

Чем вы можете получить эту функцию из карты и использовать ее в качестве параметра для другой функции:

 val fun1 = functionMap["a2"] if (fun1 != null) { execute(3, fun1) }