首页 > 解决方案 > Kotlin - 尝试用高阶函数分解代码

问题描述

我对 Kotlin 很陌生,我想看看使用高阶函数是否对我有帮助。

我的用例是我需要调用 IInterface 派生类的方法来将事件发送到一个或多个组件。我想让这个通用,我想检查一个高阶函数是否有帮助。一个代码示例将有助于理解(好吧,我希望如此!)。

private val eventListeners = mutableListOf<IEventInterface>() // List filled somewhere else!

private fun sendConnectionEvent(dummyString: String) {
    val deadListeners = mutableListOf<IEventInterface>()

    eventListeners.forEach {
        try {
            it.onConnectionEvent(dummyString)
        } catch (e: DeadObjectException) {
            Log.d(TAG, "Removing listener - Exception ${e.message}")
            deadListeners.add(it)
        }
    }

    deadListeners.forEach { it ->
        eventListeners.remove(it)
    }
}

private fun sendWonderfulEvent(dummyString: String, dummyInt: Int) {
    val deadListeners = mutableListOf<IEventInterface>()

    eventListeners.forEach {
        try {
            it.onWonderfulEvent(dummyString, dummyInt)
        } catch (e: DeadObjectException) {
            Log.d(TAG, "Removing listener - Exception ${e.message}")
            deadListeners.add(it)
        }
    }

    deadListeners.forEach { it ->
        eventListeners.remove(it)
    }
}

我添加了 2 个类似的方法(在实际用例中我会有更多),我认为(我希望!)可以做一些事情,但我不能让高阶函数在这种情况下工作,因为:

希望这足够清楚。

谢谢你的帮助!

虚拟现实

标签: kotlin

解决方案


这是如何完成的

fun onEvent(body: (IEventInterface) -> Unit) {
    val deadListeners = mutableListOf<IEventInterface>()
    eventListeners.forEach {
        try {
            body(it)
        } catch (ex: DeadObjectException) {
            Log.d(TAG, "Removing listener - Exception ${e.message}")
            deadListeners.add(it)
        }
    }

    deadListeners.forEach { it ->
        eventListeners.remove(it)
    }
}

推荐阅读