java - sun.org.mozilla Rhino 和扩展 Java 抽象类

标签 java javascript scripting rhino

在 sun.org.mozilla 版本的 Rhino 中,JavaAdapter 仅将接口(interface)作为其第一个参数,而不是根据此错误消息的任何其他类型的类:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorExcep
tion: JavaAdapter: first arg should be interface Class (<Unknown source>#11) in
<Unknown source> at line number 11

有没有办法通过 Rhino 扩展抽象类(或普通类)?

这是有问题的代码:

var j = new JavaAdapter(foo.bar.abstractClass, {
    field : "test",
    method : function () {
        print("on enable");
    }
});

最佳答案

对于 Rhino 的 Sun 版本,另一个答案是正确的。如果切换到原始 (Mozilla) Rhino 是您的选择,从问题的措辞中并不完全清楚。

具体来说,当 Sun 将 Rhino 添加到 Java 时,“a few components have been excluded due to footprint and security reasons”,其中之一就是 Mozilla 的 JavaAdapter。 Sun 编写了他们自己的“JavaAdapter”,但它比 Mozilla 的更小更简单,而且只能用于实现单个 Java 接口(interface)。 Mozilla 原来的 JavaAdapter 没有这样的限制:我一直用它来实现抽象类。

它与一些模糊的哲学差异无关,例如“JavaScript 实际上并不像 Java 那样是‘OO’”。 Sun 认为“使用 JavaAdapter 扩展 Java 类或实现多个接口(interface)的情况非常罕见”(同上),因此决定删除此功能。

如果您可以使用您的代码发送一个 850KB 的 jar 文件,那么请使用 Mozilla Rhino 并实现您想要的所有抽象类!

关于java - sun.org.mozilla Rhino 和扩展 Java 抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4801037/

相关文章:

java - 线程不适用于 Laterna

java - 使用 docx4j(或任何其他 api)将 excel 附加到 .docx

java - 如何暂时禁用Spring缓存的缓存

JavaScript map 文件在 Firefox 中不起作用

javascript - 调整api中google Earth版权信息的大小

regex - Grep 在包含 n 个文件的文件夹中查找多个模式。如果找到模式的匹配项,则创建 mkdir

java - JButton 和 jgraphx 不会同时出现

javascript - 如何使用 jquery 将 html 树转换为自定义的 json 树?

linux - 庆典 : Copying files to multiple locations

javascript - 获取特定文件夹中包含特定字符串的文件