我目前正在尝试重构一个看起来像这样的项目的一部分:
很多班
B extends A; C extends A; D extends C; E extends B; F extends A; ...
在代码的某处:
if (x instanceof B){
B n = (B) x;
...
}else if (x instanceof C){
C n = (C) x;
...
}else if (x instanceof D){
D n = (D) x;
...
}else if (x instanceof E){
E n = (E) x;
...
}else if (x instanceof G){
G n = (G) x;
...
}...
上面的if-construct目前位于一个CC为19的函数中.现在我的问题是:我可以将这个if-construct拆分为多个函数并让Java的OO做出魔术吗?或者有什么捕获我需要注意的?
我的想法:
private void oopMagic(C obj){ ... Do the stuff from the if(x instanceof C) here}
private void oopMagic(D obj){ ... Do the stuff from the if(x instanceof D) here}
private void oopMagic(E obj){ ... Do the stuff from the if(x instanceof E) here}
....
而不是巨大的if:
oopMagic(x);
编辑:我无法更改任何类(A,B,C,…).在if语句中,一些getter用于从每个对象读取(从不写入)数据.