我发现了一些关于使用Mozilla的Rhino在Javascript和Java之间对类定义进行混洗的问题。我已经得到了足够远,这种工作原理:我可以使用ScriptableObject在Java中构建Rhino JavaAdapter吗?
的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的构造函数不带任何参数,有没有任何文件为任何地方的类(例如,它不是here),我还没有找到任何静态方法(例如Context
或ScriptableObject
)创建这样一个类。我也试过Context.jsToJava(o, MyClass.class)
,但是引发了一个例外。
我知道这是一个古老的问题,但我仍然有点在这工作。值得注意的是:我发现我的'JavaInterface''d“subclass”可以调用'protected'超类方法,但不能访问'protected'超类字段/变量。我猜这是预期的行为?我只是添加了愚蠢的单线getter和setter,但似乎不应该有必要。 – Coderer 2013-06-10 12:36:11