rhino で javascript から Java メソッドをオーバーライドする方法を探しています。これが私のコードです:
public class CustomClass {
public String s="some string";
public void doSomething(){}
}
その後:
Object wrappedOut = Context.javaToJS(new CustomClass(), scope);
ScriptableObject.putProperty(scope, "CustomClass", wrappedOut);
String s="CustomClass.s='aaa'; \n CustomClass.doSomething=function(args){};";
Object result = cx.evaluateString(scope, s, "<cmd>", 1, null);
そのため、値を CustomClass.s に変更することはできますが、メソッド doSomething には変更できません。
次のエラーが表示されます。
org.mozilla.javascript.EvaluatorException: Java メソッド "doSomething" を割り当てることができません。(#2)
UPDATE コメントで要求されたように、ここに私の完全なソースコードがあります:
CustomClass.java
public class CustomClass {
public String s="Do something now!";
public void doSomething(Object ... v){
System.out.println("do something");
}
}
Scripting.java
import org.mozilla.javascript.*;
public class Scripting {
public static void main(String args[])
{
Context cx = Context.enter();
try {
Scriptable scope = cx.initStandardObjects();
Object wrappedOut = Context.javaToJS(new CustomClass(), scope);
ScriptableObject.putProperty(scope, "CustomClass", wrappedOut);
String s="CustomClass.doSomething=function(args){};";
Object result = cx.evaluateString(scope, s, "<cmd>", 1, null);
System.err.println(Context.toString(result));
}catch(WrappedException e){
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}finally {
// Exit from the context.
Context.exit();
}
}
}