为什么NashornScriptEngineFactory不可能仅使用ClassFilter和args来获取ScriptEngine?

时间:2016-10-18 14:20:19

标签: javascript java-8 nashorn scriptengine

我目前正在项目中使用Nashorn,我想从ScriptEngine创建一个只有NashornScriptEngineFactory的{​​{1}},以保护我的脚本以避免意外调用某些库。我还想为工厂添加参数(这里ClassFilter以便在严格模式下执行所有javascript函数。)

我在--strict中找到了这些原型:

NashornScriptEngineFactory

我想知道为什么没有原型:

public ScriptEngine getScriptEngine()
public ScriptEngine getScriptEngine(final String... args)
public ScriptEngine getScriptEngine(final ClassFilter classFilter)
public ScriptEngine getScriptEngine(final ClassLoader appLoader)
public ScriptEngine getScriptEngine(final String[] args, final ClassLoader appLoader)
public ScriptEngine getScriptEngine(final String[] args, final ClassLoader appLoader, final ClassFilter classFilter)

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

在通常的简单情况下,通常只需使用正在进行调用的类的类加载器来获取ScriptEngine实例。也就是说,你可以传递

this.getClass().getClassLoader()

(或按名称明确引用该类)。只需将其传递给三参数getScriptEngine()方法。

现在,在不那么正常,不那么简单的情况下,你需要担心多个类加载器(例如,有时在servlet容器中出现问题或类似Ant任务),然后你得到的地方类加载器可能会有所作为。如果你真的处于这种情况,那么(A)祝你好运,(B)希望你有足够的背景来知道要通过什么。