История изменений
Исправление
Legioner,
(текущая версия)
:
В том и дело, все ради того чтобы избавится от однотипного кода вида
По возможности лучше избавиться от рефлексии.Можно писать код вида
listeners.forEach(l -> l.someEvent(arg1, arg2));
твой код нормальный, но не соблюдает принцип наименьшего удивления. При его виде сразу возникает желание залезть в кишки и посмотреть что это за хитрая прокся такая. Ты её обзови хотя бы forAll(), хоть из места вызова будет понятно, что происходит.
Кстати перед перебором листенеров их очень желательно скопировать в отдельный массив и перебирать его. Потому что возникает желание в листенере убрать себя из списка, а это ConcurrentModificationException. Ну или хранить листенеры в структуре, которая нормально относится к модификации при переборе.
Исправление
Legioner,
:
В том и дело, все ради того чтобы избавится от однотипного кода вида
По возможности лучше избавиться от рефлексии.Можно писать код вида
Util.callForEach(listeners, l -> l.someEvent(arg1, arg2));
твой код нормальный, но не соблюдает принцип наименьшего удивления. При его виде сразу возникает желание залезть в кишки и посмотреть что это за хитрая прокся такая. Ты её обзови хотя бы forAll(), хоть из места вызова будет понятно, что происходит.
Кстати перед перебором листенеров их очень желательно скопировать в отдельный массив и перебирать его. Потому что возникает желание в листенере убрать себя из списка, а это ConcurrentModificationException. Ну или хранить листенеры в структуре, которая нормально относится к модификации при переборе.
Исправление
Legioner,
:
В том и дело, все ради того чтобы избавится от однотипного кода вида
По возможности лучше избавиться от рефлексии.Можно писать код вида
Util.callForEach(listeners, l -> l.someEvent(arg1, arg2));
твой код нормальный, но не соблюдает принцип наименьшего удивления. При его виде сразу возникает желание залезть в кишки и посмотреть что это за хитрая прокся такая. Ты её обзови хотя бы forAll(), хоть из места вызова будет понятно, что происходит.
Кстати перед перебором листенеров их очень желательно скопировать в отдельный массив и перебирать его. Потому что возникает желание в листенере убрать себя из списка а это ConcurrentModificationException. Ну или хранить листенеры в структуре, которая нормально относится к модификации при переборе.
Исходная версия
Legioner,
:
В том и дело, все ради того чтобы избавится от однотипного кода вида
По возможности лучше избавиться от рефлексии.Можно писать код вида
Util.callForEach(listeners, l -> l.someEvent(arg1, arg2));
Кстати перед перебором листенеров их очень желательно скопировать в отдельный массив и перебирать его. Потому что возникает желание в листенере убрать себя из списка а это ConcurrentModificationException.