1

有没有办法将类继承与 CDI 事件一起使用?

可以说我有这样的事情:

public class ParentEvent{}

public class ChildEvent extends ParentEvent{}

和这样的:

public class Manager(){
    @Inject 
    private Event<ParrentEvent> event;

    public void foo(){
        event.fire(new ParentEvent());
    }

    public void bar(){
        event.fire(new ChildtEvent());
    }        
}

public class Observer{

      public void observesParent(@Observes ParentEvent event){
          //do something
      }

      public void observesChild(@Observes ChildEvent event){
          //do something
      }
}

在这种情况下,ParentEvent 和 ChildEvent 都由 observesParent() 处理 - 由于 Manager 类中的事件属性类型。有没有办法用两种观察者方法观察 ChildEvent ?

4

1 回答 1

2

CDI 的想法是将限定符与事件/观察者结合使用(而不是继承)。检查焊接文档中的该章节。所需的行为应该可以通过以下方式轻松实现:

public class Manager(){
    @Inject
    @Parent
    private Event<MyEvent> parentEvent;

    @Inject
    @Child
    private Event<MyEvent> childEvent; 

// ...

    public void foo(){
        event.fire(parentEvent);
    }

    public void bar(){
        event.fire(childEvent);
    }
}


public void observeChild(@Observes @Child MyEvent myEvent) { ... }
public void observeParent(@Observes @Parent MyEvent myEvent) { ... }
public void observeAll(@Observes MyEvent myEvent) { ... }

这比使用继承要灵活得多……

于 2012-06-11T13:36:25.020 回答