我今天做了一些功課與訪問者模式,和我做了有些看起來像這樣(編輯示例代碼wikipedia)訪問者:與訪問者模式的一些非常通用的代碼
class CarElementPrintVisitor implements CarElementVisitor {
public void visit(CarElement element) {
if (element.getClass() == Wheel.class)
{
return visit((Wheel)element);
}
else if (element.getClass() == Engine.class)
{
return visit((Engine)element);
}
else if (element.getClass() == Body.class)
{
return visit((Body)element);
}
else //if (v.getClass() == Car car.class)
{
return visit((Car)element);
}
}
public void visit(Wheel wheel) {
System.out.println("Visiting " + wheel.getName() + " wheel");
}
public void visit(Engine engine) {
System.out.println("Visiting engine");
}
public void visit(Body body) {
System.out.println("Visiting body");
}
public void visit(Car car) {
System.out.println("Visiting car");
}
}
的「 public void visit(CarElement element)「方法是醜陋的(如果添加更多的CarElements,需要維護),但是我想保留這個方法,所以我試圖做得更好。
最後我想這一點:
public void visit(CarElement element) {
return visit(element.getClass().cast(element));
}
但這只是返回「訪華(CarElement元素)」,即使element.getClass()返回正確的類,所以它在一個無限循環結束。
有誰知道該怎麼做,我正在做什麼? (如果這是可能的,我不確定)。
+1這就是我所說的。 –
該死的我現在變笨了,非常感謝。當stackoverflow允許我接受答案。 – Webbies