import java.util.*;
interface Foo { void foo(); }
interface Bar { void bar(); }
class Humpty implements Foo, Bar {
public void foo
() { System.
out.
println("Humpty.foo()"); } public void bar
() { System.
out.
println("Humpty.bar()"); } }
class Dumpty implements Foo, Bar {
public void foo
() { System.
out.
println("Dumpty.foo()"); } public void bar
() { System.
out.
println("Dumpty.bar()"); } }
public class Main {
@SuppressWarnings("unchecked")
public static <FooBar
extends Foo
& Bar
> void main
(String[] args
) { // I actually have no idea what the syntax should be.
// Fix: I previously used <? extends Foo, Bar>, thanks Jon Skeet and vijucat
FooBar foobar;
if (random.nextBoolean())
foobar = (FooBar) new Humpty();
else
foobar = (FooBar) new Dumpty();
foobar.foo();
foobar.bar();
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKaW50ZXJmYWNlIEZvbyB7IHZvaWQgZm9vKCk7IH0KaW50ZXJmYWNlIEJhciB7IHZvaWQgYmFyKCk7IH0KCmNsYXNzIEh1bXB0eSBpbXBsZW1lbnRzIEZvbywgQmFyIHsKICBwdWJsaWMgdm9pZCBmb28oKSB7IFN5c3RlbS5vdXQucHJpbnRsbigiSHVtcHR5LmZvbygpIik7IH0KICBwdWJsaWMgdm9pZCBiYXIoKSB7IFN5c3RlbS5vdXQucHJpbnRsbigiSHVtcHR5LmJhcigpIik7IH0KfQoKY2xhc3MgRHVtcHR5IGltcGxlbWVudHMgRm9vLCBCYXIgewogIHB1YmxpYyB2b2lkIGZvbygpIHsgU3lzdGVtLm91dC5wcmludGxuKCJEdW1wdHkuZm9vKCkiKTsgfQogIHB1YmxpYyB2b2lkIGJhcigpIHsgU3lzdGVtLm91dC5wcmludGxuKCJEdW1wdHkuYmFyKCkiKTsgfQp9CgpwdWJsaWMgY2xhc3MgTWFpbiB7CiAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgcHVibGljIHN0YXRpYyA8Rm9vQmFyIGV4dGVuZHMgRm9vICYgQmFyPiB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgLy8gSSBhY3R1YWxseSBoYXZlIG5vIGlkZWEgd2hhdCB0aGUgc3ludGF4IHNob3VsZCBiZS4KICAgIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7CiAgICAvLyBGaXg6IEkgcHJldmlvdXNseSB1c2VkIDw/IGV4dGVuZHMgRm9vLCBCYXI+LCB0aGFua3MgSm9uIFNrZWV0IGFuZCB2aWp1Y2F0CiAgICBGb29CYXIgZm9vYmFyOwogICAgaWYgKHJhbmRvbS5uZXh0Qm9vbGVhbigpKQogICAgICBmb29iYXIgPSAoRm9vQmFyKSBuZXcgSHVtcHR5KCk7CiAgICBlbHNlCiAgICAgIGZvb2JhciA9IChGb29CYXIpIG5ldyBEdW1wdHkoKTsKICAgIGZvb2Jhci5mb28oKTsKICAgIGZvb2Jhci5iYXIoKTsKICB9Cn0=