Proxyでmethod_missing

いろいろ手を考えてみる。


こんなクラスを定義して


public class Foo {

public static Scriptable getJsObj() {
return (Scriptable) Proxy.newProxyInstance(Foo.class.getClassLoader(), new Class { Scriptable.class }, new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object
args) throws Throwable {
final String name = (String) args[0];

return new BaseFunction() {
public Object call(Context cx, Scriptable scope, Scriptable self, Object args) {
System.out.println("name: " + name);
System.out.println("args: " + Arrays.asList(args));
return null;
}
};
}
});
}

}

スクリプトからこう呼び出す。


var o = Foo.getJsObj();
o.foo();
o.bar("a");
o.zoo("B", 12);

結果がこんな感じ。


name: foo
args:
name: bar
args: [a]
name: zoo
args: [B, 12]