我将一个函数从 JavaScript 文件传递到 Java 代码中。JavaScript 函数如下所示:
entity.handler = function(arg1, arg2) {
//do something
};
在 Java 代码中,类实现了Scriptable
接口。当我调用 JavaScript 时,实际上在 Java 中调用了以下方法:
Scriptable.put(java.lang.String s, org.mozilla.javascript.Scriptable scriptable, java.lang.Object o)
我的情况在哪里:
s = '处理程序';
scriptable - 类型为的对象com.beanexplorer.enterprise.operations.js.ScriptableEntity
o - 实际上是一个函数,它的类型是org.mozilla.javascript.gen.c15
,
在调试器中( o instanceof Scriptable )
返回。true
在Scriptable.put()
方法实现中,我想将操作委托给“o”对象:
SomeClass.invoke( new SomeListener(){
@override
public void someAction(int arg1, float arg2) {
//here I need to delegate to the 'o' object.
//do something looked like:
o.call(arg1, arg2); // have no idea how to do it, if it's possible.
}
}
我该怎么做?我找不到我的案例所需的任何示例。
谢谢。
编辑,解决方案:Actuly o - 可以转换为 Function. 因此,以下解决方案有所帮助:
@Override
put(java.lang.String s, org.mozilla.javascript.Scriptable scriptable, java.lang.Object o) {
....
final Function f = ( Function )o;
final SomeInterface obj = new ...;
obj.someJavaMethod( Object someParams, new SomeJavaListener() {
@Override
public void use(Object par1, Object par2) throws Exception {
Context ctx = Context.getCurrentContext();
Scriptable rec = new SomeJavaScriptableWrapperForObject( par1);
f.call( ctx, scriptable, scriptable, new Object[] { rec, par2 } );
}
});