在避免Java中的instanceof运算符的同时观察多个可观察对象?


问题内容

如果我有一个对象,希望能够观察其他几个可观察对象,而不是所有相同类型的对象。例如,我希望A能够观察B和C。B和C完全无关,除了它们都实现Observable之外。

显而易见的解决方案是仅在update方法中使用“ if instanceof”,但很快就会变得混乱,因此我想知道是否还有其他方法?


问题答案:

与以前的建议类似,您可以将更新更改为。

public void update(Observable o, Object arg) {
  try{
    Method update = getClass().getMethod(o.getClass(), Object.class);
    update.invoke(this, o, arg);
  } catch(Exception e) {
    // log exception
  }
}

这样您可以添加一种方法

public void update(A a, Object arg);
public void update(B b, Object arg);
public void update(C c, Object arg);

对于您要观察的每种类型。不幸的是,您需要了解Observable的确切具体类型。但是,您可以更改反射以允许接口等。