Сегодня я делал домашнюю работу с шаблоном посетителя, и сделал посетителя, который выглядел примерно так (отредактированный пример кода из 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 () возвращает правильный класс, поэтому он заканчиваетсяв бесконечном цикле.
Кто-нибудь знает, как это сделать, что я пытаюсь сделать?(Если это даже возможно, я не уверен).