假设我有以下课程:
public interface X {
...
}
public class A implements X {
...
}
public class B implements X {
...
}
现在假设我在某处有一个方法,它接受一个 X 类型的对象,并且必须以不同的方式处理 X 的每个实现。天真的方法是:
public void doSomething(X x) {
if(x instanceof A)
doSomethingA((A) x);
else if(x instanceof B)
doSomethingB((B) x);
}
...但这似乎特别难看,而且不是多态的。一般来说,处理这种情况的干净方法是什么?
编辑:当然,如果我可以将 doSomething() 的实现推送到 A 类和 B 类,那会很容易,但是在没有意义的情况下呢?即 doSomething() 是在 C 类上定义的,其实现高度依赖于 C 的内部状态。