gpt4 book ai didi

java - 在 Java 脚本中在 Rhino 解释器中实例化抽象类

转载 作者:行者123 更新时间:2023-11-30 04:24:02 26 4
gpt4 key购买 nike

我正在使用 javax.script.* 和 Rhino 在 Java 程序中编写脚本。

脚本可以很好地实现接口(interface),但是当我尝试使用类似的语法来实例化抽象类(给出未实现的方法的定义)时,我收到一条错误消息,指出 MyTestAbstractClass(我试图实例化的类)是一个接口(interface)或抽象。我做错了什么吗?

这是我正在使用的 Javascript 代码:

var testObject  = new foo.mytestpackage.TestAbstractClass() {
printMessage: function() {
print("foo");
}
};

TestAbstractClass是一个具有普通构造函数(无参数)的类时,我得到以下堆栈跟踪:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: error instantiating (JavaAdapter: first arg should be interface Class (<Unknown source>#1)): class com.merkle.TestObject is interface or abstract (<Unknown source>#1) in <Unknown source> at line number 1
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
at javax.script.AbstractScriptEngine.eval(Unknown Source)

我正在使用 Sun 的(稍微简化的,据我所知)Rhino 实现,并且我想避免使用官方的 Rhino jar,因为它们非常大。

最佳答案

甲骨文的release notes for Java 7's JavaScript Engine建议不支持实例化抽象类型:

Rhino's JavaAdapter has been overridden. JavaAdapter is the feature by which Java class can be extended by JavaScript and Java interfaces may be implemented by JavaScript. We have replaced Rhino's JavaAdapter with our own implementation of JavaAdapter. In our implementation, only single Java interface may be implemented by a JavaScript object.

错误消息似乎证实了这一点:

JavaAdapter: first arg should be interface Class (<Unknown source>#1)

如果您不愿意切换引擎,则必须在 Java 中实现该类型并使用该实现。

关于java - 在 Java 脚本中在 Rhino 解释器中实例化抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16325445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com