Intereting Posts
Самый короткий возможный код для создания исключения в Котлине? Нельзя ли градировать проект построения, когда я добавляю класс ChatInformation kotlin, который расширяет RealmObject до моего проекта, где ошибка? Как мне наследовать документацию KDoc? Дженкинс град строит неудачу из-за приложения: compileDebugKotlin Kotlin добавляет пользовательский прослушиватель для доступа к виджетам на Android Как изменить поле участника с отражением Котлина? Создание класса Parcelable со вторичным конструктором, который принимает список как параметр в Kotlin Наследование метода Init Кинжал 2 в модульных тестах с Котлином Anko игнорирует layout_margin, определенный в стиле Может ли ковариантный параметр типа находиться во входной позиции в конструкторе? Сравнение двух вариантов в Котлине Kotlin – Как создать функцию псевдонима RxJava flatmap ()? Анонимный параметр функции Kotlin Если hashCode () возвращает уникальный идентификатор объекта

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

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

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