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

时间:2011-01-26 02:50:37

标签: java javascript scripting rhino

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

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

有没有办法,无论多么hacky,通过Rhino扩展抽象类(或普通类)?

以下是有问题的代码:

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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