在避免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的确切具体类型。但是,您可以更改反射以允许接口等。