使用instanceOf检查消除条件语句

时间:2016-01-13 09:31:08

标签: refactoring instanceof visitor-pattern

我有以下方法:

@Override
public <T> T method(T object){
    if(object instanceOf Type1){
    ...
    }
    elseif(object instanceOf Type2){
    ...
    }
    ...
}

object始终为SuperType类型,Type1Type2,...都是SuperType的所有子类型。我无法访问任何类型SuperTypeType1等,因此我无法更改它们。

我希望消除这种具有大量if - s和instanceOf检查的结构。我尝试为此目的实现访问者模式,但它不起作用,因为我无法修改上面提到的任何类型。

有没有人知道这个例子的一个很好的解决方案?谢谢!

1 个答案:

答案 0 :(得分:0)

你可以有一个调度表。

private final static Map<Class<?>, Handler> dispatch = ....
// contains things like  Type2.class -> Type2Handler

dispatch.get(object.getClass()).handle(object);
// may need to iterate superclasses if that is a concern

不确定这是否更好。