Intereting Posts

Какой самый элегантный способ удалить слушателя из списка из обратного вызова

Предположим, у меня есть следующий слушатель

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