All pastes #768564 Raw Edit

No double-dispatch?

public java v1 · immutable
·published 2007-11-10 18:46 UTC
rendered paste body
public interface Foo {	void accept(Visitor v); }public class AFoo implements Foo {	public void accept(Visitor v) {		v.execute(this);	}}public class BFoo implements Foo {	public void accept(Visitor v) {		v.execute(this);	}}public interface Visitor {	void execute(Foo f); }public class AVisitor implements Visitor {	public void execute(Foo f) {		System.out.println("AVisitor Foo");	}	public void execute(AFoo a) {		System.out.println("AVisitor AFoo");	}		public void execute(BFoo a) {		System.out.println("AVisitor BFoo");	}}public class BVisitor implements Visitor {	public void execute(Foo f) {		System.out.println("BVisitor Foo");	}			public void execute(AFoo a) {		System.out.println("BVisitor AFoo");	}			public void execute(BFoo a) {		System.out.println("BVisitor BFoo");	}	public static void main(String[] args) {		Foo a = new AFoo();		Foo b = new BFoo();				Visitor v = new AVisitor();				a.accept(v);		b.accept(v);	}}outputs:AVisitor FooAVisitor Foo