1
Java的子类调用函数我有一个JavaScript脚本,看起来像这样:在犀牛
function run(database) {
var result = database.query("query", "some resource name");
//operations on result
return result;
}
,我有Java代码执行的脚本是这样的:
public Object execute(String script, Database database) {
NashornScriptEngineFactory nsef = new NashornScriptEngineFactory();
ScriptEngine engine = nsef.getScriptEngine();
try {
engine.eval(script);
Invocable invocable = (Invocable) engine;
return invocable.invokeFunction("run", database);
} catch(ScriptException e) {
throw new RuntimeException(e);
}
}
Database
是一个包含几个方法定义的接口,但是而不是包含query
方法。我打电话execute
,执行Database
,称之为DatabaseImpl
,确实有query
方法。这将是多态的,并且该脚本需要知道传递给它的Database
实例上有哪些方法可用。我决定不要使用这种泛型,因为它们在运行时被擦除,所以JavaScript无法使用它们,因此脚本编写者需要正确地使用这些类型。
然而,当运行此代码时,得到以下异常:
javax.script.ScriptException: TypeError: database.query is not a function in <eval> at line number 25
基本上,要点是,我有它实现一个接口的对象,并调用该特定实例可实现的方法,但不是接口定义的一部分。我的印象是,这应该仍然有效,但事实并非如此。对我而言,我需要在脚本中进行子播以访问query
方法(这甚至有可能吗?),为什么我会得到这个错误?是否因为该方法不能从接口定义中获得?有没有解决方法?
谢谢。
可能PEBCAC然后...我会继续寻找。感谢您检查了这一点。 – Peter