繁体   English   中英

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

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

假设我有以下侦听器

interface MyListener {
    fun onResult(result: Int)
}

并且我的班级拥有此侦听器的列表

val MyListenerList = ArrayList<MyListener>()

我的疑问是:如果某个注册了侦听器的人想要在触发回调( onResult )时注销它(将其从列表中删除),最优雅的方法是这样做,同时要记住在列表时直接调用它迭代运行是否会导致ConcurrentModificationException

不要在MyListenerList进行迭代,请复制MyListenerList并在该副本上进行迭代。 这样,删除就可以在MyListenerList而不会引起ConcurrentModificationException

例如:

ArrayList(MyListenerList).forEach { it.onRemove(n) }

要么

MyListenerList.toArray().forEach { it.onRemove(n) }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM