gpt4 book ai didi

java - Java会选择哪个JS Script Engine?

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:15 26 4
gpt4 key购买 nike

ScriptEngineManager.getEngineByName 查找并为给定名称创建一个 ScriptEngine。

Rhino 将自己注册为“js”、“rhino”、“JavaScript”、“javascript”、“ECMAScript”和“ecmascript”

Nashorn 将自己注册为“nashorn”、“Nashorn”、“js”、“JS”、“JavaScript”、“javascript”、“ECMAScript”和“ecmascript”

如果我使用 Nashorn 和 Rhino 都已注册的名称,如“js”,将使用哪个脚本引擎?它会在 Java 8 上使用 Nashorn,否则会使用 Rhino 吗?

最佳答案

查看 JavaDoc对于 registerEngineName:

Registers a ScriptEngineFactory to handle a language name. Overrides any such association found using the Discovery mechanism.

还有 registerEngineName 源代码(注意 nameAssociations 是一个 HashMap ):

public void registerEngineName(String name, ScriptEngineFactory factory) {
if (name == null || factory == null) throw new NullPointerException();
nameAssociations.put(name, factory);
}

因此,似乎对于给定的名称,getEngineByName 将返回最后为该名称注册的脚本引擎工厂。

由于脚本引擎工厂是通过 ServiceLoader 加载的机制,加载顺序将取决于相关类加载器的 getResources 枚举服务配置文件的顺序方法。

对于默认安装,所有这些都无关紧要,因为 Java 8 仅包含 Nashorn,而 Java 7 及更早版本仅包含 Rhino。如果您要通过系统类路径添加一个额外的引擎,它将在 Bootstrap /扩展类加载器加载的引擎之后加载,因此优先。

关于java - Java会选择哪个JS Script Engine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26580931/

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