- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现了一些关于使用 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!"
这让我大吃一惊,但我想将 JavaAdapter 构造从 Javascript 转移到 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)
,但引发了异常。
最佳答案
我也一直在为这个问题苦苦思索。我终于让这个工作了:
将您的 JavaScript 更改为:
var xyz = {foo: function() {return 'Hello!';}};
现在将创建 JavaAdapter 的单行代码替换为:
String stub = "new JavaAdapter(Packages.MyClass, xyz);";
Object o = context.evaluateString(scope, stub, "stub", 1, null);
MyClass mc = (MyClass) Context.jsToJava(o, MyClass.class);
我不是这方面的专家,但您似乎不能直接从 Java 代码使用 JavaAdapter(不幸的是),但我们可以运行一段 stub 代码以从 JavaScript 调用它。
当心我示例中的拼写错误,我是从我的工作代码中翻译过来的。
调用 MyClass mc 实例似乎工作正常。从 JavaScript 调用(即从 foo 调用 Java)以访问 MyClass 的 super 方法和字段似乎总是需要“this”关键字。我还在想办法弄明白。 MyClass 中的方法和字段也必须是公共(public)的而不是 protected (同样不幸)。
关于java - 我可以使用 ScriptableObject 在 Java 中构建 Rhino JavaAdapter 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11672500/
谁能给我一个例子,说明如何使用 Rhino 的 java 适配器在 java 脚本中扩展 java 类? 最佳答案 对于可能遇到此问题的任何其他人,有一个不错的例子 here (作者用它来扩展awt.
我发现了一些关于使用 Mozilla 的 Rhino 在 Javascript 和 Java 之间改组类定义的问题。我已经走得够远了,这行得通: Javascript: new JavaAdapter
我是一名优秀的程序员,十分优秀!