Аналогично предыдущим предложениям вы можете изменить свое обновление на.
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);
для каждого типа, который вы хотите наблюдать. К сожалению, вам нужно знать точный конкретный тип наблюдаемой. Однако вы можете изменить отражения, чтобы разрешить интерфейсы и т. Д.