我发现约洗牌使用Mozilla Rhino的JavaScript和Java之间的类定义了几个问题。 我已经得到了足够远,这种工作原理:
使用Javascript:
new JavaAdapter(MyClass, {foo: function(){return 'Hello!';}});
Java的
String script = // the above stuff
Object o = context.evaluateString(scope, script, "UserScript", 1, null);
MyClass mc = (MyClass) Context.jsToJava(o, MyClass.class);
mc.foo(); // returns "Hello!"
这把我吓倒了,但我想从JavaScript移动JavaAdapter的建设Java端。 我正在写一个框架,用户将在JavaScript中定义的逻辑,和他们有他们就会越幸福粘贴较少的样板。
理想情况下,我可以这样做:
使用Javascript:
{foo: function(){return 'Hello!';}};
Java的
String script = // the above stuff
Object o = context.evaluateString(scope, script, "UserScript", 1, null);
MyClass mc = new JavaAdapter(MyClass.class, o);
mc.foo(); // returns "Hello!"
但据我可以告诉JavaAdapter的构造函数不带任何参数,有该类没有文档的任何地方(例如,它不是在这里 ),我还没有发现任何静态方法(例如,在Context
或ScriptableObject
),其创建这样一个类。 我也试过Context.jsToJava(o, MyClass.class)
但引发了异常。