我有以下方法:
@Override
public <T> T method(T object){
if(object instanceOf Type1){
...
}
elseif(object instanceOf Type2){
...
}
...
}
object
始终为SuperType
类型,Type1
,Type2
,...都是SuperType
的所有子类型。我无法访问任何类型SuperType
,Type1
等,因此我无法更改它们。
我希望消除这种具有大量if
- s和instanceOf
检查的结构。我尝试为此目的实现访问者模式,但它不起作用,因为我无法修改上面提到的任何类型。
有没有人知道这个例子的一个很好的解决方案?谢谢!
答案 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
不确定这是否更好。