1

Javaを使用してObserver/Observableパターンを実装しています。ただし、コードのオブザーバー部分で問題が発生しています。

観察可能

public class Model extends Observable {

   public void notify() {
       this.setChanged();
       this.notifyObservers(new ArrayList<A>());
       this.notifyObservers(new ArrayList<B>());
   }
}

観察者

public class View implements Observer {

    @Override
    public void update(Observable observable, Object object) {
        // TODO: If object is ArrayList<A>?
        System.out.println("A");
        // TODO: If object is ArrayList<B>?
        System.out.println("B");
    }
}

ArrayListでジェネリックをチェックするには、TODOコメントをどのように入力しますか?これも可能ですか?(可能であれば、クラスを追加せずに実行したいと思います。)

4

2 に答える 2

2

オブジェクトのタイプを確認するために使用できinstanceofますが、パターンを誤用しています。
の考え方は、Observable明確に定義されたインターフェースを備えており、Observer知る必要があるのは、APIを使用して通知を渡すことだけです。
正確に何であるかを知るためのロジックは、コードに混在させてなりObservableません。
あなたの質問から私にはあなたが2つ持っているように聞こえます、そして彼らは通知のために彼ら自身のリスナーを彼らに特に興味を持っObservableておくべきです。結合されていない

于 2012-08-24T16:32:55.820 に答える
2

Observableは、1つのタイプのデータのみを送信する必要があります。

public class ModelA extends Observable {

   public void notify() {
       this.setChanged();
       this.notifyObservers(new ArrayList<A>());
   }
}

public class ModelB extends Observable {

   public void notify() {
       this.setChanged();
       this.notifyObservers(new ArrayList<B>());
   }
}

もう1つの方法は、ArrayList<A>とArrayList<B>をクラスに入れることです。そのクラスでオブザーバーに通知できます。

于 2012-08-24T16:36:20.530 に答える