假设我有以下侦听器

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) }

07-24 14:32