/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Visitors
{
{
List
<K
> handlers
= Arrays.
asList(new K1
(),
new K2
(),
new K3
()); S sample = new A();
for (K visitor : handlers) {
sample.visit(visitor);
}
sample = new B();
for (K visitor : handlers) {
sample.visit(visitor);
}
}
}
interface K {
void handle(A a);
void handle(B b);
}
class A implements S {
public void visit(K visitor) { visitor.handle(this); }
}
class B implements S {
public void visit(K visitor) { visitor.handle(this); }
}
interface S {
void visit(K visitor);
}
class K1 implements K {
public void handle
(A a
) { System.
out.
println("K1 handling A"); } public void handle
(B b
) { System.
out.
println("K1 handling B"); } }
class K2 implements K {
public void handle
(A a
) { System.
out.
println("K2 handling A"); } public void handle
(B b
) { System.
out.
println("K2 handling B"); } }
class K3 implements K {
public void handle
(A a
) { System.
out.
println("K3 handling A"); } public void handle
(B b
) { System.
out.
println("K3 handling B"); } }
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgVmlzaXRvcnMKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CiAgICAgICAgTGlzdDxLPiBoYW5kbGVycyA9IEFycmF5cy5hc0xpc3QobmV3IEsxKCksIG5ldyBLMigpLCBuZXcgSzMoKSk7CiAgICAgICAgUyBzYW1wbGUgPSBuZXcgQSgpOwogICAgICAgIGZvciAoSyB2aXNpdG9yIDogaGFuZGxlcnMpIHsKICAgICAgICAgICAgc2FtcGxlLnZpc2l0KHZpc2l0b3IpOwogICAgICAgIH0KICAgICAgICBzYW1wbGUgPSBuZXcgQigpOwogICAgICAgIGZvciAoSyB2aXNpdG9yIDogaGFuZGxlcnMpIHsKICAgICAgICAgICAgc2FtcGxlLnZpc2l0KHZpc2l0b3IpOwogICAgICAgIH0KCX0KfQoKaW50ZXJmYWNlIEsgewogICAgdm9pZCBoYW5kbGUoQSBhKTsKICAgIHZvaWQgaGFuZGxlKEIgYik7Cn0KY2xhc3MgQSBpbXBsZW1lbnRzIFMgewogICAgcHVibGljIHZvaWQgdmlzaXQoSyB2aXNpdG9yKSB7IHZpc2l0b3IuaGFuZGxlKHRoaXMpOyB9Cn0KY2xhc3MgQiBpbXBsZW1lbnRzIFMgewogICAgcHVibGljIHZvaWQgdmlzaXQoSyB2aXNpdG9yKSB7IHZpc2l0b3IuaGFuZGxlKHRoaXMpOyB9Cn0KCmludGVyZmFjZSBTIHsKICAgIHZvaWQgdmlzaXQoSyB2aXNpdG9yKTsKfQpjbGFzcyBLMSBpbXBsZW1lbnRzIEsgewogICAgcHVibGljIHZvaWQgaGFuZGxlKEEgYSkgeyBTeXN0ZW0ub3V0LnByaW50bG4oIksxIGhhbmRsaW5nIEEiKTsgfQogICAgcHVibGljIHZvaWQgaGFuZGxlKEIgYikgeyBTeXN0ZW0ub3V0LnByaW50bG4oIksxIGhhbmRsaW5nIEIiKTsgfQp9CmNsYXNzIEsyIGltcGxlbWVudHMgSyB7CiAgICBwdWJsaWMgdm9pZCBoYW5kbGUoQSBhKSB7IFN5c3RlbS5vdXQucHJpbnRsbigiSzIgaGFuZGxpbmcgQSIpOyB9CiAgICBwdWJsaWMgdm9pZCBoYW5kbGUoQiBiKSB7IFN5c3RlbS5vdXQucHJpbnRsbigiSzIgaGFuZGxpbmcgQiIpOyB9Cn0KY2xhc3MgSzMgaW1wbGVtZW50cyBLIHsKICAgIHB1YmxpYyB2b2lkIGhhbmRsZShBIGEpIHsgU3lzdGVtLm91dC5wcmludGxuKCJLMyBoYW5kbGluZyBBIik7IH0KICAgIHB1YmxpYyB2b2lkIGhhbmRsZShCIGIpIHsgU3lzdGVtLm91dC5wcmludGxuKCJLMyBoYW5kbGluZyBCIik7IH0KfQ==