when a new type is added to class A the compiler should flag all the switch statements that need to be adjusted?
一个很好的方法是使用更强大的多分派实现替换switch语句,例如Visitor Pattern:
interface VisitorOfA {
Object visitA(A a);
Object visitB(B b);
}
class A {
Object accept(VisitorOfA visitor) {
return visitor.visitA(this);
}
}
class B extends A {
Object accept(VisitorOfA visitor) {
return visitor.visitB(this);
}
}
有了这个基础架构,您可以删除switch语句,将其替换为访问者的实现:
Object res = a.accept(new VisitorOfA() {
public Object visitA(A a) { return new Bla(); }
public Object visitB(B b) { return new Cop(); }
});
当您向A添加新的子类型时,比如C类,您需要做的就是向VisitorOfA添加一个新方法:
Object visitC(C c);
现在,编译器将发现尚未实现此新方法的所有位置,从而帮助您避免运行时出现问题.