с методом callback().
Так же есть класс manager, который хранит коллекцию listener и, помимо основной логики, имеет методы addListener и removeListener.
Суть проблемы в том, что при обходе коллекции listeners и вызова callback() каждого, в одном из них отрабатывает removeListener(this), от чего происходит инвалидация итератора.
С этим можно что-то сделать в менеджере или нужно убирать removeListener из callback?
Спасибо, завтра попробую) Пробовал в менеджере итератор создавать и ним коллекцию обходить, а в случае удаления перезаписывать итератор, но что-то не пошло
Не, наверно не так понял. Интерфейс не трогал. Просто для обхода списка сделал членом менеджера итератор и в самом методе remove переназначал его
Вообще есть ещё решение «не для всех» но можно посмотреть в сурсы ноды, так как вероятно её разработчикам нужно было решать подобную проблему
А что за сурсы ноды?
Только учти, что колбек может удалить не себя, а а листенер, который ещё не вызвался. То есть перед вызовом, надо проверить не удалён ли он
Да просто храни в deque
Обсуждают сегодня