Это работает, если я изменяю IVisitor для включения метода для каждого желаемого типа:
public static interface IFooVisitor {
public void visit(Foo foo);
public void visit(Bar bar);
}
и реализую метод accept () для каждого:
public static class Foo {
public void accept(IFooVisitor visitor) {
visitor.visit(this);
}
}
public static class Bar extends Foo {
public void accept(IFooVisitor visitor) {
visitor.visit(this);
}
}
Я теряю некоторую гибкостьи соедините Foo и Bar с шаблоном посетителя, но это работает.