5

2 つの異なるタイプのイベントを処理する必要がありますが、次の問題が発生しています。

インターフェース EventListener は、異なる引数で複数回実装することはできません:EventListener<PriceUpdate>およびEventListener<OrderEvent>

これに対するエレガントな解決策はありますか?

public interface EventListener <E> {
    public void handle(E event);
}
public interface PriceUpdateEventListener extends EventListener<PriceUpdate> {
}
public interface OrderEventListener extends EventListener<OrderEvent> {
}

public class CompositeListener implements OrderEventListener,PriceUpdateEventListener {
....
}
4

2 に答える 2

6

実際には、handle(Object)メソッドは1つだけです。あなたは事実上同じように書いています

public class CompositeListener implements EventListener {
    public void handle(Object event) {
        if (event instanceof PriceUpdate) {
            ///
        } else if (event instanceof OrderEvent) {
            ///
        }
    }
}

このチェックロジックがないと、どのような場合でもイベントリスナーを効果的に呼び出すことはできません。

于 2012-07-02T09:01:12.917 に答える