Java 8 Nashorn加载脚本而不执行它

时间:2016-03-17 22:54:13

标签: nashorn

我使用Java 8 Nashorn执行特定的先前同意的方法。我可以调用具体方法没问题。但有一件事让我感到困惑的是,当我加载脚本时,它也会执行它。

例如,如果file.js包含print(“hello world!”),则scriptEngine.eval(新的FileReader(“./ file.js”)将执行并打印hello world。我必须先执行此操作才能执行此操作调用我想要的特定方法。

有没有办法在不执行脚本的情况下eval()/加载脚本?

由于

1 个答案:

答案 0 :(得分:2)

结果你可以通过将引擎转换为Compilable然后调用编译函数来完成此操作。

final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
final Compilable compilable = (Compilable) engine;
        final Invocable invocable = (Invocable) engine;
        final String statement = "function fetch(values) { return values['first_name'] + ' ' + values['last_name']; };";
        final CompiledScript compiled = compilable.compile(statement);

这实现了我想要的而不需要eval()它