说
class E extends B {}
class B extends A {}
我们有,
B v = new E();
process(v);
我们知道这是真的,
v.getClass() == E.class
有没有办法告诉v的静态绑定是否是编程上的B?
编辑: 最初的想法是对重载方法进行一行检查。 像,
process(A a) {
// ... code for a.processABC();
if (a.getStaticBindingClass() == B.class) { // not a subclass of B
// Additional logic for statical binding case.
...
}
// ... code for a.processDEF();
}
可以引入过程(B b);但是,有很多来自流程(A a)的复制代码。