mirror of
https://github.com/corda/corda.git
synced 2024-12-29 09:18:58 +00:00
9bb3d6b972
git-subtree-dir: sgx-jvm/avian git-subtree-mainline:f978eab8d1
git-subtree-split:09e4fe60d0
43 lines
1.3 KiB
Java
43 lines
1.3 KiB
Java
import java.lang.reflect.Proxy;
|
|
import java.lang.reflect.InvocationHandler;
|
|
import java.lang.reflect.Method;
|
|
|
|
public class Proxies {
|
|
private static void expect(boolean v) {
|
|
if (! v) throw new RuntimeException();
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
Foo foo = (Foo) Proxy.newProxyInstance
|
|
(Proxies.class.getClassLoader(), new Class[] { Foo.class },
|
|
new InvocationHandler() {
|
|
public Object invoke(Object proxy, Method method, Object[] arguments)
|
|
{
|
|
if (method.getName().equals("bar")) {
|
|
return "bam";
|
|
} else if (method.getName().equals("baz")) {
|
|
return ((Integer) arguments[0]) + 1;
|
|
} else if (method.getName().equals("bim")) {
|
|
return ((Long) arguments[0]) - 1L;
|
|
} else if (method.getName().equals("boom")) {
|
|
return ((String) arguments[0]).substring(1);
|
|
} else {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
}
|
|
});
|
|
|
|
expect(foo.bar().equals("bam"));
|
|
expect(foo.baz(42) == 43);
|
|
expect(foo.bim(42L) == 41L);
|
|
expect(foo.boom("hello").equals("ello"));
|
|
}
|
|
|
|
private interface Foo {
|
|
public String bar();
|
|
public int baz(int v);
|
|
public long bim(long v);
|
|
public String boom(String s);
|
|
}
|
|
}
|