我正在使用访问者模式进行开发,如下所示:
public abstract class AbstractVisitor {
public void visit(AbstractConfig config) {
throw new NotImplementedException();
}
}
由
继承@Component
public class ConcreteVisitor extends AbstractVisitor {
public void visit(ConfigA config) {
// Do something
}
public void visit(ConfigB config) {
// Do something
}
}
当然ConfigA
和ConfigB
延伸AbstractConfig
。
我使用ConcreteVisitor
的bean实例通过自动装配它:
@Autowired
private AbstractVisitor visitor;
问题是,当我调用visitor.visit(config)
时,config
是ConfigA
的实例,它会引发NotImplementedException。
现在我将所有可能的抽象方法都声明为AbstractVisitor
,但还有另一个更好的解决方案吗?我的意思是,具体的访问者可以定义任何多态到父抽象方法的参数的方法。
提前谢谢。