如何知道observer类在java中发送的泛型对象?

7eumitmz  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(331)

我正在使用java实现observer/observate模式。但是,我在代码的观察者部分遇到了一个问题。
可观察的

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");
    }
}

如何填写todo注解以检查arraylist上的泛型?这有可能吗(如果可能的话,我更愿意在不实现更多类的情况下这样做。)

6jjcrrmo

6jjcrrmo1#

你可以用 instanceof 看看你的对象是什么类型的,但是你误用了这个模式。
我们的想法是 Observable 有一个定义良好的接口和所有 Observer 需要知道的是使用api来传递通知。
逻辑知道什么是 Observable 不应在代码中混用。
从你的问题听上去你有两个 Observable 他们应该让自己的听众对他们特别感兴趣,以便通知他们。一个都没有

8xiog9wr

8xiog9wr2#

一个可观察对象应该只发送一种类型的数据。

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>());
   }
}

另一种选择是将arraylist和arraylist放入一个类中。你可以用这个类通知你的观察者。

相关问题