问题描述
一个有点人为的例子来说明我的问题。想象一下,我们有一些 JavaScript 函数库,已经由一大群前端开发人员每天维护和更新。具体来说,想象一个这样的函数如下所示:
function employeesForStore(store) {
var dictionary = {
"downtown": ["Joe", "Mary", "Steve"],
"uptown": ["Jules", "Vincent", "Matt"],
// and so on for hundreds of locations
};
return dictionary[store];
}
注意:请忽略此函数实现的细节。实际的函数可能比简单的 JSON 字典查找要复杂得多,并且假设我们不知道 js 函数的任何实现细节。我们所知道的是它接受一个字符串参数并返回字符串数组。
现在我们想在我们的 Java 代码中利用这个函数。也就是说,在我们的 Java 代码中,我们希望“加载”这个函数,然后能够多次调用它,传递String
参数并接收String[]
或ArrayList<String>
结果。
到目前为止,通过搜索 SO 和 google,我了解到这将涉及使用:
javax.script.ScriptEngineManager
javax.script.ScriptEngine
- 也许
scriptEngine.getContext()
用于将值传递给函数并接收结果。
我对上述细节有点模糊,特别是因为我发现的大多数示例都涉及一次运行 javascript 代码,而不是使 javascript 函数可用于 Java。
我希望看到的示例代码
- 假设 js 函数在文件“my_functions.js”中,将该文件加载到 Java 中,以便其所有函数都可以使用。
- 调用
employeesForStore("downtown")
并将其结果存储在本机 javaString[]
或List<String>
名为downtownResults
. - 与 2 相同,但调用
employeesForStore("uptown")
并存储在变量中uptownResults