假设我有以下监听器
interface MyListener {
fun onResult(result: Int)
}
并且我的类包含此侦听器的列表
val MyListenerList = ArrayList<MyListener>()
我的疑问是:如果注册了监听器的人想要在回调(onResult
)被触发时取消注册(从列表中删除),那么最优雅的方法是什么,考虑到在列表迭代运行时直接调用它将导致ConcurrentModificationException
?
答案 0 :(得分:3)
不要对MyListenerList
进行迭代,复制MyListenerList
并遍历副本。这样,移除可以在MyListenerList
上进行,而不会导致ConcurrentModificationException
。
例如:
ArrayList(MyListenerList).forEach { it.onRemove(n) }
或
MyListenerList.toArray().forEach { it.onRemove(n) }