Передать функцию в качестве параметра и выполнить пользовательскую функцию? - PullRequest
0 голосов
/ 18 июня 2019

В моем приложении для Android:

  suspend fun getTraidersList(): TransportResponse = withContext(Dispatchers.IO) {
            // some common methods
            try {
                val response: Response<List<Trader>> = traderMonitorRestClient.getTraidersList()
             //  some common methods
            } catch (e: Throwable) {
               // some comon methods
            }
        }

        suspend fun executeTraderOperation(traderOperation: Trader.Operation, base: String, quote: String): TransportResponse = withContext(Dispatchers.IO) {
            // some common methods
            try {
               val response: Response<Void> = traderMonitorRestClient.executeTraderOperation(traderOperation.toString().toLowerCase(), base.trim(), quote.trim(), sender, key)
             //  some common methods
            } catch (e: Throwable) {
               // some comon methods
            }
}

Как видите, у меня есть 2 метода, которые имеют много общих методов.Я хочу извлечь эти распространенные методы в отдельный метод.Я хочу передать функцию в качестве параметра my_common_method.Можно ли сделать что-то подобное в Kotlin?

suspend fun my_common_method(fun some_custom_function) {
            // some common methods
            try {
                val response: Response<*> = some_custom_function()
             //  some common methods
            } catch (e: Throwable) {
               // some comon methods
            }
        }

Может быть, есть лучшее решение?

В getTraidersList() функция some_custom_function равна getTraidersList().А в executeTraderOperation функция some_custom_function равна executeTraderOperation.Возможно ли это в Котлине?

1 Ответ

2 голосов
/ 18 июня 2019

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

suspend fun my_common_method(block: suspend () -> Response<TransportResponse>) {
            // some common methods
            try {
                val response = block()
             //  some common methods
            } catch (e: Throwable) {
               // some comon methods
            }
        }

, тогда вы просто позвоните my_common_method {getTraidersList() }

...