package test; public static void main(String[] args) { // Create a visitable collection FooCollection c = new FooCollection(); // Add some members c.add(new Foo()); c.add(new Bar()); // Visit c.accept(new IVisitor() { public void visit(Foo foo) { System.out.println("Foo"); } public void visit(Bar bar) { System.out.println("Bar"); } }); } public static class Foo { } public static class Bar extends Foo { } public static interface IVisitor { public void visit(T object); } public static class FooCollection { private final ArrayList m_list = new ArrayList<>(); public void accept(IVisitor visitor) { for (Foo foo : m_list) { visitor.visit(foo); } } public void add(Foo foo) { m_list.add(foo); } }