我有一个设计问题,我无法弄清楚如何解决。基本上我正在使用访问者来更新某个类的实例。我希望将来能够实现不同类型的更新,作为我的更新类的扩展。我还希望能够更新不同类型的对象(都派生自基类)。所以我有:
public class Update
{
public void visit(A obj) { /* generic */ }
public void visit(B obj) { /* specific for B */ }
public void visit(C obj) { /* specific for C */ }
}
public class A
{
public void accept(Update u)
{
u.visit(this);
}
}
public class B extends A { /* ... */ }
public class C extends A { /* ... */ }
我有我的实例List<A>
,我想对每个对象应用最具体的更新。但是,当我尝试将更新应用于列表的元素之一时,我总是会visit(A)
被调用,而不是更具体的元素。我想那是因为它是List<A>
, not List<B>
or List<C>
,但我希望多态性能够解决这个问题。我不能只删除visit(A)
运算符,因为有时不区分 C 和 B 是有意义的。您知道如何在不visit(A)
将消息发送到重载的情况下解决这个问题吗?
谢谢