LINUX.ORG.RU

История изменений

Исправление 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.