从回调列表中删除侦听器的最优雅方法是什么
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) }
假设我有以下侦听器
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) }