rhino - 从 Rhino 切换到 Nashorn

标签 rhino java-8 nashorn

我有一个 Java 7 项目,该项目大量使用 Javascript 来编写各种功能的脚本。到目前为止,我一直使用 Rhino 作为脚本引擎。我现在想迁移到 Java 8,这也意味着我将用 Nashorn 取代 Rhino。

Nashorn 与 Rhino 的兼容性如何?我可以使用它作为直接替代品吗?或者我是否可以预期我的某些脚本将不再工作并且需要移植到新引擎?是否存在 Nashorn 不支持的 Rhino 常用功能?

最佳答案

一个问题是 Nashorn 默认情况下无法再使用 importPackage(com.organization.project.package); 将整个 Java 包导入全局范围。

但是,有一个简单的解决方法:通过将此行添加到脚本中,您可以启用 Rhino 的旧行为:

load("nashorn:mozilla_compat.js");

我遇到的另一个问题是,在 java 和 javascript 之间传递数据时,某些类型转换的工作方式不同。例如,当您将 Javascript 数组传递给 Java 时到达的对象不能再转换为 List ,但它可以转换为 Map<String, Object> 。作为解决方法,您可以使用 Java.to(array, Java.type("java.util.List")) 将 Javascript 数组转换为 Javascript 代码中的 Java 列表。

关于rhino - 从 Rhino 切换到 Nashorn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22502630/

相关文章:

java - 将 Set 转换为 Map 时出现问题

java8 - 从对象内部的属性分组

java - Nashorn 中新的 Java 字符串数组

javascript - 解析 Java 应用程序的 js 文件

javascript - 使用 Rhino 的 javascript 出现语法错误 : SyntaxError: missing } after property list

javascript - 如何从 javascript 中获取 Rhino 的版本?

java - 使用 Vorto 中的自定义 JavaScript 转换解析非固定格式的二进制有效负载

java - 为什么 guava 21.0 版本中的 Maps 不采用 java.util.function.Function 等作为参数?

java - Nashorn 是否返回原生 JavaScript 对象?

javascript - Java Nashorn - ClassNotFoundException - Java.type()