CDI - наблюдатели событий - PullRequest
1 голос
/ 29 августа 2010

У меня есть наблюдатели событий, которые все наблюдают одно и то же событие, поэтому у меня есть абстрактный суперкласс, который наблюдает за этим событием, а затем подкласс переопределяет / реализует определенные функции.

Проблема в том, что он не наблюдает событие, если я не поместил метод наблюдателя события в подкласс (который противоречит цели моего проекта).

Я, безусловно, могу сделать это таким образом, но я хочу написать как можно меньше кода.

Должно ли это работать таким образом (я делаю что-то еще неправильно)?

Если это не должно работать таким образом, тогда я могу написать продюсера для одной вещи, а затем перехватчик. Я подумал, что мой первый подход был проще и с большей вероятностью будет использоваться другими разработчиками.

пример кода:

SuperClass:

public abstract class AbstractFileWriter
{
  public void onReady(@Observes ReadyEvent readyEvent)
  {
    try
    {
      handleReady(readyEvent, ...);
    }
  }

  protected abstract handleReady(ReadyEvent readyEvent, otherParameters go here);
}

SubClass

public class XmlWriter extends AbstractFileWriter
{
   protected handleReady( ... )
   { ... }
}

Если я напишу это так, handleReady никогда не будет вызываться (и ни один из них не является в этом отношении); однако, если я напишу его с помощью метода наблюдателя в подклассе, он будет работать как положено. Я хочу написать это таким образом, так как мне нужно будет написать гораздо меньше кода и немного меньше абстракции, которая облегчит понимание.

Walter

Ответы [ 2 ]

0 голосов
/ 30 августа 2010

Я написал декоратор, как я упоминал выше.По сути, это делает то же самое, просто написано немного по-другому.

Вальтер

0 голосов
/ 29 августа 2010

Либо объявите соответствующий метод в суперклассе как абстрактный, либо он вызовет абстрактный метод "detail", который реализует каждый подкласс.

...