kotlin - 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 个类似的方法(在实际用例中我会有更多),我认为(我希望!)可以做一些事情,但我不能让高阶函数在这种情况下工作,因为:
- 我想在几个实例上调用相同的方法,而不是“只是”一个基本函数
- 更糟糕的是,我需要调用的方法没有相同的原型(这太容易了!)。
希望这足够清楚。
谢谢你的帮助!
虚拟现实
解决方案
这是如何完成的
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)
}
}
推荐阅读
- java - 以编程方式注册多个点击事件(Android/Java)
- mysql - 使用while循环根据条件对多行进行分组
- python - 如何在 Matplotlib 中设置颜色范围?
- rust - 如何在编译时确保类型将序列化为 JSON 数组?
- php - 如何在 Drupal 7 中将表单添加为菜单项?
- r - 如何在拥挤的 tmap 图例中修复垂直空间 [R]
- python - 在 Python 中创建和排序二维列表
- python - 如何将函数应用于需要 Pandas 中的行索引的数据框?
- objective-c - 随机生成器的随机性稍差
- graphql - 有没有办法在 graphQL 中对查询进行分组?