假设我有以下侦听器
interface MyListener {
fun onResult(result: Int)
}
并且我的类(class)拥有此侦听器的列表
val MyListenerList = ArrayList<MyListener>()
我的疑问是:如果在触发回调(
onResult
)的情况下注册了侦听器的某人想要注销它(将其从列表中删除),最优雅的方法是这样做,要记住在列表时直接调用它迭代运行会导致ConcurrentModificationException
吗? 最佳答案
不要遍历MyListenerList
,复制MyListenerList
并遍历该副本。这样,可以在MyListenerList
上进行删除而不会导致ConcurrentModificationException
。
例如:
ArrayList(MyListenerList).forEach { it.onRemove(n) }
要么
MyListenerList.toArray().forEach { it.onRemove(n) }