java - Java中如何知道Observer类发送的泛型对象?

标签 java generics observer-pattern

我正在使用 Java 实现 Observer/Observable 模式。但是,我在代码的 Observer 部分遇到了问题。

可观察

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 上的泛型?这可能吗? (如果可能的话,我更愿意在不实现更多类的情况下这样做。)

最佳答案

Observable 应该发送一种且仅一种类型的数据。

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 放入一个类中。您可以通过该类通知您的观察者。

相关文章:

java - MySQL:启动时加载/每次需要时加载

java - 为什么 Sonar 在具有构造函数和 setter 的类上显示重复错误?

java - 多线程同步对象

Java 子类化泛型参数

c# 在回调中调用 endinvoke,使用泛型

java - 为什么 Java API 中的许多方法都有 "abstract"修饰符?

Scala:A 扩展 Ordered[A]

java - 我们如何使用 Java 接口(interface)强制执行双向接口(interface)?

android - 如何一个接一个地合并两个实时数据?

java - 我可以使用观察者模式进行错误处理吗?