class IndirectReference<E> {
private E ref;
public IndirectReference(E ref) {
this.ref = ref;
}
public E get() {
return ref;
}
public void set(E ref) {
this.ref = ref;
}
}
enum Enum { E1, E2 }
class Main {
private IndirectReference<Enum> e;
public Enum get() {
return e.get();
}
public void foo(IndirectReference<Enum> ref) {
this.e = ref;
}
public static void main
(String[] args
) { Main prog = new Main();
IndirectReference<Enum> ref = new IndirectReference(Enum.E1);
prog.foo(ref);
System.
out.
println("Before: " + prog.
get()); ref.set(Enum.E2);
System.
out.
println("After: " + prog.
get()); }
}
Y2xhc3MgSW5kaXJlY3RSZWZlcmVuY2U8RT4gewogICAgcHJpdmF0ZSBFIHJlZjsKICAgIAogICAgcHVibGljIEluZGlyZWN0UmVmZXJlbmNlKEUgcmVmKSB7CiAgICAgICAgdGhpcy5yZWYgPSByZWY7CiAgICB9CiAgICAKICAgIHB1YmxpYyBFIGdldCgpIHsKICAgICAgICByZXR1cm4gcmVmOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBzZXQoRSByZWYpIHsKICAgICAgICB0aGlzLnJlZiA9IHJlZjsKICAgIH0KfQoKZW51bSBFbnVtIHsgRTEsIEUyIH0KCmNsYXNzIE1haW4gewogICAgcHJpdmF0ZSBJbmRpcmVjdFJlZmVyZW5jZTxFbnVtPiBlOwogICAgCiAgICBwdWJsaWMgRW51bSBnZXQoKSB7CiAgICAgICAgcmV0dXJuIGUuZ2V0KCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGZvbyhJbmRpcmVjdFJlZmVyZW5jZTxFbnVtPiByZWYpIHsKICAgICAgICB0aGlzLmUgPSByZWY7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBNYWluIHByb2cgPSBuZXcgTWFpbigpOwogICAgICAgIEluZGlyZWN0UmVmZXJlbmNlPEVudW0+IHJlZiA9IG5ldyBJbmRpcmVjdFJlZmVyZW5jZShFbnVtLkUxKTsKICAgICAgICBwcm9nLmZvbyhyZWYpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlOiAiICsgcHJvZy5nZXQoKSk7CiAgICAgICAgcmVmLnNldChFbnVtLkUyKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyOiAiICsgcHJvZy5nZXQoKSk7CiAgICB9Cn0K