从回调列表中删除侦听器的最优雅方法是什么

What is the most elegant way to remove a listener from a list from a callback

假设我有以下侦听器

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