¿Cuál es la forma más elegante de eliminar un oyente de una list de una callback?
Supongamos que tengo el siguiente oyente
interface MyListener { fun onResult(result: Int) }
y que mi class tiene una list de este oyente
val MyListenerList = ArrayList<MyListener>()
Mi duda es: si alguien que registró el oyente quiere anular el logging (eliminarlo de la list) cuando se onResult
la callback ( onResult
), ¿cuál es la forma más elegante de hacerlo, teniendo en count que lo llama directamente mientras la list la iteración se está ejecutando causará una ConcurrentModificationException
?
No itere sobre MyListenerList
, haga una copy de MyListenerList
e itere sobre la copy. De esta forma, la eliminación puede ocurrir en MyListenerList
sin causar una ConcurrentModificationException
.
Por ejemplo:
ArrayList(MyListenerList).forEach { it.onRemove(n) }
o
MyListenerList.toArray().forEach { it.onRemove(n) }